此内部对象方法的值
Value of this inside object method?
在使用箭头函数调用函数时,我对this
的值感到非常困惑。让我们以我为例:
var obj = {
property: 5,
func1: function () {
console.log(this.property);
},
func2: () => {
console.log(this.property);
}
}
当我将此代码放在浏览器控制台上时,发生了一件有趣的事情,func1()
将按预期输出5
*,但是当我运行func2
时,我得到了undefined
.这是怎么回事?为什么func2
中 this
的值引用全局对象(在这种情况下Window
(。
我想我期待这种输出,因为它就是这样工作的,这就是艾伦和斯莱维特曼分别在这里和这里解释的原因。但根据杰森的解释
箭头函数没有自己的此值。箭头函数中的 this 值始终继承自封闭范围。
那么,为什么这个内func2
的价值不是继承他的封闭范围obj
的价值呢?
那么,为什么这个内
func2
的价值不是继承他的封闭范围obj
的价值呢?
这里的obj
不是"封闭"范围。您在其中定义obj
的范围是"封闭"范围。
请考虑以下示例:
var obj = {
property: 5,
func1: function () {
let func2 = () => {
console.log(this.property);
}
func2();
},
}
obj.func1(); // logs 5
obj.func1.call({
property: 6
}) // logs 6
调用内部func2
时,this
关键字引用包装器obj
func1
函数中this
的obj
,func2
继承this
值。内箭头函数不绑定其自己的this
值。
func2
中的this
是继承函数本身的作用域的值,仅此而已。要使其工作,您必须制作类似的东西:
var obj = {
property: 5,
func1: function () {
console.log(this.property); // shows 5
},
func2: () => {
console.log(this.property); // shows undefined
this.property = 6;
console.log(this.property); // shows 6
}
}
相关文章:
- 如何使用内部对象构造对象
- 如何将原型用于自定义方法和对象操作
- 可以“;超级“;可以在子类的方法内部使用,在不直接引用的情况下调用相应的超类方法
- 编程实践-使用helper方法隐藏对象
- 是否可以使用Object.assign来克隆带有其方法的对象
- 如何从方法内部获取js方法名称
- AngularJS 在 IndexedDB 调用后返回方法的对象
- 方法不在另一个方法内部调用
- 如何在 javascript 中为数组创建方法作为对象的属性
- 解析查询查找方法返回对象而不是数组
- Angular promise回调不是在构造函数方法内部触发,而是在对象文本方法中触发
- 从对象方法内部的数组中运行console.log
- 从方法内部设置对象变量
- 取消对象方法内部的动画帧不起作用
- 使用“;这个“;internal$.each内部对象方法
- 方法调用对象内部的方法
- Javascript:从对象方法内部调用回调函数,产生意想不到的结果
- 使用“this"对象方法内部的关键字
- Javascript从其他公共方法(同一对象)内部访问公共方法
- 此内部对象方法的值