OO JS:对象中的这个值

时间:2013-10-15 20:29:49

标签: javascript oop

http://jsfiddle.net/9nmfX/

var a = {
    init: function(){
        this.b.c();
    },
    b : {
        constant: 'some constant',
        c: function(){
            alert( this.constant );
        }
    }
}
a.init();

我现在一直在写JavaScript。我突然想到我没有使用this。为每个调用写出整个命名是非常烦人和耗时的。

在上面的代码中是this跨浏览器兼容的实现,还是有人知道我是否错误地使用了这个?

1 个答案:

答案 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