gpt4 book ai didi

javascript - 从另一个对象中调用时的 javascript 函数的 this

转载 作者:行者123 更新时间:2023-11-30 06:21:32 26 4
gpt4 key购买 nike

根据我的阅读和理解,函数的执行上下文 (this) 与其声明的位置无关,而是从调用它的位置(调用站点)开始。考虑 2 种情况,其中 foo 是在全局上下文中定义的 -

//1.
function foo(){ console.log(this); }

var obj = {
x: foo,
};

obj.x(); //prints obj because foo was called "on" obj object

//2.
function foo(){ return this; }

var obj = {
x: function(){ console.log(foo()); },
};

obj.x(); //prints window object.

我对第二种情况感到困惑。虽然我知道 x 函数的上下文是 obj,但我无法理解为什么 foo 在 x 函数(其上下文实际上是 obj)中被称为 on 窗口对象?肯定有很多关于这个话题的问题,我找不到类似于这种例子的东西。谢谢。

最佳答案

我会尽量给出一个简短的答案:

函数的上下文通常是它被赋值的对象。由于在第二种情况下 foo 未声明为对象的属性,因此它的上下文是全局(窗口)对象。

如果你想将对象作为上下文传递给 foo,你必须使用 foo.call(this, ...parameters) 或 foo.apply(this, parameters) 调用它,或者你可以创建一个变量绑定(bind)到对象的函数:

const myFoo = foo.bind(this);
myFoo(...parameters);

Here是一篇带有扩展解释的文章。

关于javascript - 从另一个对象中调用时的 javascript 函数的 this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52791020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com