发布网友 发布时间:2022-04-24 12:02
共2个回答
热心网友 时间:2022-04-24 13:31
在firefox中可以用Console调试 (Ctrl+Shift+K):
在Web Console 中会显示var1 var2 var3 ...,以一个空格隔开。
正如wjsl所说,定时器中
setTimeout(Student_A.wakeup,3000 )这里是把Student_A.wakeup这个函数作为参数传入了setTimeout函数。我们知道,函数的定义里面如果有this这个reserved word,那么它的含义取决于调用的方式。如果是用obj.function1 这种带点的格式来调用,那么this就是obj。 如果是直接调用,this则是window。那么在这里3秒钟过后, wakeup将会被直接调用,因为您并没有传入Student_A。
解决办法:加入一个sleep() 方法:
People.prototype = {其中$this变量以当前对象赋值。
由于js closure的特性,当setTimeout时间到,匿名函数中的$this还是之前赋予的那个对象。所以如果运行Student_A.sleep(5000),5秒钟之后js engine 就会运行Student_A.wakeup()。
(符号“$" 跟a-z,1-9 一样,都是变量名中可以使用的字符)。
这里删掉:
//Student子类构造函数,内部调用超类构造函数
function Student(name) {
People.call(this, name); //从People类继承,同时传递参数name
};
Java构造函数才是分开来写的,javascript 中由构造函数产生对象(配合 new关键字),并没有类。
代码供参考:
var Student = function(classroom, name, age) {“醒来”之后,属性改变:
可以先sleep(),然后马上改属性。然后wakeup()的时候就会发现属性产生了变化 :D
文中的 Student.prototype 在运行 Student.prototype = new People(); 语句时被完全更改。所以setClass() 已经无法调用。可以在重写wakeup时同样定义。
热心网友 时间:2022-04-24 14:49
/*追答你确定有这个属性?