function MyClass(){
this.field1 = "Field in MyClass";
}
MyClass.prototype.print = function() {
console.log("print in MyClass:" + this.field1);
}
function useMyClassPrint() {
var mc = new MyClass();
mc.print();
setTimeout(mc.print, 10);
setTimeout("mc.print()", 10);
}
我得到了这些结果:
mc.print(); // this one is easy, it returns "print in MyClass:Field in MyClass"
// but ...
setTimeout(mc.print, 10); // "print in MyClass:undefined" why?!
setTimeout("mc.print()", 10); // runtime error?!@@
答案 0 :(得分:0)
function MyClass(){
this.field1 = "Field in MyClass";
}
MyClass.prototype.print = function() {
console.log("print in MyClass:" + this.field1);
}
var mc = new MyClass();
mc.print(); /*ok*/
setTimeout(mc.print, 10); /*it's just a reference to function*/
setTimeout(mc.print.bind(mc),10);/*binded*/

定义时
function MyClass(){
this.field1 = "Field in MyClass";
}
在实例化类时会设置field1。字段1不是常数。
试试控制台:
MyClass.field1 -> /*undefined*/
new MyClass().field1 -> /*Field in MyClass*/
setInterval()函数接收函数:
setTimeout(mc.print, 10);
mc.print只是对函数的引用,没有引用你的" mc"实例