javascript-箭头功能用作方法:此值
作者:互联网
MDN提供以下箭头功能的两个示例
例子1
var adder = {
base: 1,
addThruCall: function(a) {
var f = v => v + this.base;
var b = {
base: 2
};
return f.call(b, a);
}
};
console.log(adder.addThruCall(1)); // 2
例子2
'use strict';
var obj = {
i: 10,
b: () => console.log(this.i, this),
c: function() {
console.log(this.i, this);
}
}
obj.b(); // prints undefined, Window {...} (or the global object)
obj.c(); // prints 10, Object {...}
题
>示例1中的this.base指向adder.base
>示例2中属性b的this.i解析为undefined
如果箭头函数没有this值,this.base是否也应解析为undefined?
解决方法:
箭头函数有一个“ this”,即定义它们时当前范围内的“ this”.
在第二个示例中,在箭头函数b()中,由于没有特定的父范围定义“ this”,因此“ this”指向“ Window”(在浏览器上下文中)
同样在第二个示例中,在命名函数c()中,function()…引入了作用域,默认情况下未定义.
因此,您所看到的完全是可以预期的.但是,如您所见,“ this”很难掌握,因此良好的代码风格建议您尽可能避免使用它.在这种情况下,您可能要使用闭包.
有趣的是,在另一个问题中阅读了这个内容:How does the “this” keyword work?
标签:arrow-functions,javascript 来源: https://codeday.me/bug/20191025/1928483.html