var a = {
init: function(){
this.b.c();
},
b : {
constant: 'some constant',
c: function(){
alert( this.constant );
}
}
}
a.init();
我现在一直在写JavaScript。我突然想到我没有使用this
。为每个调用写出整个命名是非常烦人和耗时的。
在上面的代码中是this
跨浏览器兼容的实现,还是有人知道我是否错误地使用了这个?
答案 0 :(得分:2)
是的,这是跨浏览器/平台。这是ECMAScript的一部分,因此它适用于Javascript的所有实现。
请注意,this
可能并不总是引用您想要的对象。考虑:
var func = a.b.c;
func();
哪个调用a.b.c
引用的函数,但this
将引用window
对象或null
而不是a.b
。
另一个例子:
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