Javascript文字对象表示法此对象名称

时间:2012-02-01 07:16:30

标签: javascript javascript-objects object-literal

我有一个像这样的对象文字:

var test = {
    one: function() {
    },
    two: function() {
        this.one(); // call 1
        test.one(); // call 2
    }
};

two函数中的调用之间有什么区别(使用对象文字名称与使用this)?

2 个答案:

答案 0 :(得分:5)

test始终在two函数的闭包内绑定到变量test,而this取决于函数的调用方式。如果使用常规对象成员访问语法调用该函数,this将成为拥有该函数的对象:

test.two(); // inside, "this" refers to the object "test"

您可以使用this

更改Function.prototype.call的值
test.two.call(bar); // inside, "this" refers to the object "bar"

但是test的值在two函数内部保持不变,无论函数如何被调用。

答案 1 :(得分:1)

不同之处在于第二次调用将始终绑定到测试对象,而这可能会反弹到其他对象:

var other = {
    one: function () {
        alert('other.one');
    }
};

// call test.two as a method of object other
test.two.call(other); // calls other.one and test.one