Javascript 文字对象表示法 This 与对象名称

发布于 2025-01-01 06:29:45 字数 249 浏览 0 评论 0原文

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

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

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

I have an object literal like this:

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

What is the difference between the calls in the two function (using the object literal name versus using this)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甜扑 2025-01-08 06:29:45

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

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

您可以使用 Function.prototype 更改 this 的值.call

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

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

test is always bound within the closure of the two function to the variable test whereas this depends on how the function is called. If the function is called using the regular object member access syntax, this becomes the object owning the function:

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

You can change the value of this by using Function.prototype.call:

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

But the value of test remains the same inside the two function, regardless of how the function is invoked.

我不会写诗 2025-01-08 06:29:45

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

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

The difference is that the second call will always be bound to the test object, whereas this might be rebound to some other object:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文