使用 ES6 在函数中合并属性时,尝试访问 this 对象时会出现问题。
var person = { name: "jason", shout: () => console.log("my name is ", this.name) } person.shout() // Should print out my name is jason
但是,运行此代码无法包含预期的名称,仅打印“我的名字是”。这个问题源于箭头函数的独特行为。
箭头函数缺少绑定 this、参数或其他特殊名称。创建对象时, this 位于封闭范围内,而不是在对象内。通过检查这些变体中的代码,问题变得更加明显:
var person = { name: "Jason" }; person.shout = () => console.log("Hi, my name is", this);
并且,当转换为 ES5 中箭头语法的模糊近似时:
var person = { name: "Jason" }; var shout = function() { console.log("Hi, my name is", this.name); }.bind(this); person.shout = shout;
在这两种情况下,shout 函数的 this 指向定义 person 的作用域,而不是添加到该对象时与该对象关联的新作用域person.
虽然箭头函数无法复制预期的行为,但 ES6 提供了一种替代解决方案,利用方法声明模式来节省空间:
var person = { name: "Jason", // ES6 "method" declaration - leaving off the ":" and the "function" shout() { console.log("Hi, my name is", this.name); } };
以上是为什么 ES6 箭头函数中的 `this` 不能按预期工作?的详细内容。更多信息请关注PHP中文网其他相关文章!