Javascript oojs:对象中的这个值
我写JavaScript已经有一段时间了。我突然想到我没有使用过Javascript oojs:对象中的这个值,javascript,oop,Javascript,Oop,我写JavaScript已经有一段时间了。我突然想到我没有使用过这个。为每个调用编写完整的命名是非常烦人和耗时的 在上面的代码中,是这个跨浏览器兼容的实现,或者有人知道我是否错误地使用了它吗?是的,就是跨浏览器/平台。这是ECMAScript的一部分,因此它将在所有Javascript实现中工作 请注意,此可能并不总是指您希望它指向的对象。考虑: var func = a.b.c; func(); 调用a.b.c引用的函数,但此将引用窗口对象或为null而不是a.b 另一个例子: setTim
这个。为每个调用编写完整的命名是非常烦人和耗时的
在上面的代码中,是这个跨浏览器兼容的实现,或者有人知道我是否错误地使用了它吗?是的,就是跨浏览器/平台。这是ECMAScript的一部分,因此它将在所有Javascript实现中工作
请注意,此
可能并不总是指您希望它指向的对象。考虑:
var func = a.b.c;
func();
调用a.b.c
引用的函数,但此
将引用窗口
对象或为null
而不是a.b
另一个例子:
setTimeout(a.init, 1000); // Throws an error and fails after 1 second
但是:
但是我不明白为什么要声明var func=a.b.c,唯一的原因是对a.b.c()的简短引用吗?(对于这种OO,php似乎要健壮得多)@John Yeah,或者作为一个例子:)当函数作为回调传递时,问题会更频繁地出现,就像类似的setTimeout
example.Ahh。。我懂了。谢谢你的提示,非常感谢。真的开始进入JS。。参加了一些关于模块化js的讨论,期待着未来几年
setTimeout(a.init, 1000); // Throws an error and fails after 1 second
setTimeout(a.init.bind(a), 1000); // Works as expected and
setTimeout(function(){ a.init(); }, 1000); // Works as expected