JavaScript对象数组属性中函数的this指向及类型判定问题
问题解答
1. this的值是什么?
执行myObject.methodArray[0]()时,this指向的是myObject.methodArray这个数组对象,也就是你看到控制台打印出的数组。
原因是JavaScript中this的绑定规则看的是函数调用时的上下文:当通过obj.prop()形式调用函数时,this会绑定到.(或索引访问[])前面的那个对象。这里的调用链可以拆解为:先获取myObject.methodArray得到数组,再调用该数组索引0对应的函数,所以函数调用时的所属对象是这个数组,而非外层的myObject,因此this绑定到数组。
2. methodArray[0]属于普通函数还是方法?
methodArray[0]本身是一个普通函数,只是调用它的方式让它临时作为数组methodArray的“方法”执行。
它本质是独立的函数,只是被存储在数组的索引0位置。如果把它提取出来直接调用:
const func = myObject.methodArray[0]; func();
此时this会绑定到浏览器的全局对象window,这才是普通函数直接调用的典型表现。而原代码中通过数组访问并调用的方式,只是让它的执行上下文变成了数组,并非它本身是方法类型。
内容的提问来源于stack exchange,提问作者Prakhar Tripathi
相关产品推荐
相关产品推荐

