对于对象数组中的函数来说,“this”的值是多少?

Pra*_*thi 2 javascript this

this数组中函数的值是多少methodArray,它是 的属性myObject?另外,是methodArray[0]普通函数还是方法?

let myObject = {
  property: "Prakhar",
  methodArray: [
    function () {
      console.log(this);
    },
  ],
};

myObject.methodArray[0]();
Run Code Online (Sandbox Code Playgroud)

在浏览器中执行此代码时,它会打印数组。不知道为什么会这样?理想情况下,如果函数不是方法或者myObject函数是方法,则它应该是窗口对象(全局)。

jse*_*ksn 5

\n

this内部函数的价值是什么methodArray

\n
\n

这取决于函数的调用方式。

\n

有关 的深入概述this,请参阅MDN >>this函数上下文。这是适用于示例中的代码的引用片段:

\n
\n

对于典型的函数, 的值this是访问该函数的对象。换句话说,如果函数调用的形式为obj.f(),则this引用obj

\n
\n

在您的示例中\xe2\x80\xa6

\n
\n
myObject.methodArray[0]();\n
Run Code Online (Sandbox Code Playgroud)\n
\n

0\xe2\x80\xa6 该函数作为数组属性的方法调用methodArray(请记住,数组是对象,并且使用括号表示法0访问属性),因此 的值将是数组。this

\n

为了进一步说明,这里是示例代码的稍微修改版本,它返回this函数的内部值,以便可以将其用于函数外部的比较:

\n

\r\n
\r\n
let myObject = {\n  property: "Prakhar",\n  methodArray: [\n    function () {\n      return this;\n    },\n  ],\n};\n\nconst thisResult = myObject.methodArray[0]();\n\nconsole.log(thisResult === myObject.methodArray); // true
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n


\n
\n

还是methodArray[0]函数或者方法?

\n
\n

方法是一个函数,它是对象的属性。0所以数组对象的属性函数是一个方法。

\n

  • [^](/sf/ask/5413689151/#comment136342365_77338478) @DarrylNoakes 感谢您的反馈。我想将答案集中在所提出的问题上,因为“this”关键字的主题已经很抽象,并且已在本网站上广泛涵盖。我在回答之前搜索了重复项,令我惊讶的是我没有找到该目标的重复目标。MDN 文章的链接非常详细地涵盖了所有内容(超出了此处单个答案的范围)。 (2认同)