提问人:Prakhar Tripathi 提问时间:10/22/2023 最后编辑:Darryl NoakesPrakhar Tripathi 更新时间:10/23/2023 访问量:101
对于对象数组中的函数,“this”的值是多少?
What will be the value of 'this' for a function in an array in an object?
问:
数组中函数的值是多少,它是 的属性?另外,是正常函数还是方法?this
methodArray
myObject
methodArray[0]
let myObject = {
property: "Prakhar",
methodArray: [
function () {
console.log(this);
},
],
};
myObject.methodArray[0]();
在浏览器中执行此代码时,它正在打印数组。不知道为什么会这样?理想情况下,如果函数不是方法或函数是方法,则它应该是窗口对象(全局)。myObject
答:
5赞
jsejcksn
10/22/2023
#1
内部函数的价值是什么?
this
methodArray
这取决于函数的调用方式。
有关 的深入概述,请参阅此
> 函数上下文> MDN。下面是适用于示例中的代码的引用代码片段:this
对于典型函数,值是访问该函数的对象。换言之,如果函数调用的形式为 ,则引用 。
this
obj.f()
this
obj
在您的示例中...
myObject.methodArray[0]();
...该函数作为数组属性处的方法调用(请记住,数组是对象,并且使用括号表示法访问属性),因此 will 的值是数组。0
methodArray
0
this
为了进一步说明,下面是示例代码的略微修改版本,它返回函数的内部值,以便它可以用于函数外部的比较:this
let myObject = {
property: "Prakhar",
methodArray: [
function () {
return this;
},
],
};
const thisResult = myObject.methodArray[0]();
console.log(thisResult === myObject.methodArray); // true
也是函数还是方法?
methodArray[0]
方法是一个函数,它是对象的属性。因此,数组对象的 at 属性函数是一个方法。0
评论
0赞
Darryl Noakes
10/22/2023
如果您提到用于控制,那就太好了。以及与箭头函数的区别(基于声明站点而不是调用站点)。:)bind()
this
this
0赞
Afzal K.
10/22/2023
箭头函数没有自己的绑定,所以我们不能用来改变它吗?this
bind()
2赞
jsejcksn
10/23/2023
^@DarrylNoakes 感谢您的反馈。我想让答案集中在所提出的问题上,因为关键字的主题已经很抽象,并且已经在这个网站上得到了广泛的介绍。我在回答之前搜索了重复项,并惊讶地发现我没有找到这个重复的目标。MDN 文章的链接非常详细地涵盖了所有内容(这里不适合单一的答案)。this
0赞
Prakhar Tripathi
10/23/2023
感谢您@jsejcksn的详细解释。我试着向 Chatgpt 问这个问题,但它给出了错误的答案。有趣的是,数组中的函数也是方法,因为数组最终是对象。
0赞
Darryl Noakes
10/23/2023
@jsejcksn 当然,明白了
评论
myObject.methodArray
myObject["methodArray"][0]()
.
this
methodArray[0]
是一个函数,而不是一个方法。当它作为对象的一部分被调用时,它是一个方法,但是当它像本例中一样被直接访问时,它只是一个普通的函数。