2

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

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

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

4

2 回答 2

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

于 2012-02-01T07:24:39.700 回答
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
于 2012-02-01T07:24:20.663 回答