我开始学习Vue.js和ECMA6语法,我在教程中看到了这一点:
methods: {
someMethod: function() {
console.log(this) // this works
}
}
然后我认为语法可能是:
methods: {
someMethod: () => {
console.log(this) // this undefined
}
}
但这有效:
methods: {
someMethod () {
console.log(this) // this works
}
}
可以解释差异和ECMA5语法吗?
答案 0 :(得分:8)
在您的三个选项中,ES5仅支持第一个选项。另外两个是ES6中的新增内容。
第三个选项是第一个选项的ES6快捷方式,因此它们在ES6中的工作方式相同。
当您使用第二个箭头语法时,this
未设置为主机对象,因为它位于第一个和第三个中。这是箭头语法的一个特性,因此当您希望将this
设置为主机对象时,不应使用它。相反,this
将被设置为定义代码的词汇上下文 - 通常称为"封闭上下文中的this
的值"或者这个"词汇的价值#34;在你的情况下,当最初声明主机对象时显然是this
时,undefined
是什么。
这是一篇关于箭头功能的好文章:ES6 In Depth: Arrow functions
答案 1 :(得分:1)
+尝试这种方式
var methods1 = function() {
var self = {
someMethod: function() {
console.log(self);
}
};
return self;
}();
var methods2 = function() {
var self = {
someMethod: () => {
console.log(self);
}
};
return self;
}();
var methods3 = function() {
function someOtherMethod() {
console.log(self);
}
var self = {
someMethod: function() {
someOtherMethod();
}
}
return self;
}();
methods1.someMethod();
methods2.someMethod();
methods3.someMethod();