Javascript MeteorJS-函数()和()之间的差异=>;
现在我的助手正在使用Javascript MeteorJS-函数()和()之间的差异=>;,javascript,meteor,ecmascript-6,Javascript,Meteor,Ecmascript 6,现在我的助手正在使用function() 它正在工作,但是如果我使用()=> 那么这个.\u id是未定义的 以下活动也是如此: 'click .foo': function(evt, tmp) { console.log(this._id); //log the real id } 及 有人能告诉我如果我使用()=>,如何获取数据吗 谢谢大家。箭头函数=>设计用于从词法范围自动绑定上下文此。在您的情况下,此未定义,因为它在严格模式下运行 要解决您的问题,您可以: 1) 使用常规函数,
function()
它正在工作,但是如果我使用()=>
那么这个.\u id是未定义的
以下活动也是如此:
'click .foo': function(evt, tmp) {
console.log(this._id); //log the real id
}
及
有人能告诉我如果我使用()=>
,如何获取数据吗
谢谢大家。箭头函数
=>
设计用于从词法范围自动绑定上下文此
。在您的情况下,此
未定义,因为它在严格模式下运行
要解决您的问题,您可以:
1) 使用常规函数,就像您已经做的那样:
2) 使用ES6速记函数表示法:
function(){}
和=>
之间的区别在于this
上下文以及调用如何影响this
在function(){}
中,此
由调用函数的方式决定。如果将其作为对象上的方法调用,这将是对象本身:actions.updateVid()
我称之为软链接
在箭头函数的情况下,此
自动绑定到定义函数的词法范围的
此。在您的示例中,它是一个未定义的
,这是“严格模式”的默认情况
无论以后如何调用arrow函数,它都会将
此
设置为未定义
我称之为“硬链接”
您可以在中找到有关
this
关键字的更多详细信息。在箭头函数中,该关键字被指定为创建函数的执行上下文的this。在函数声明或表达式中,它是由调用(或绑定)设置的,因此很可能是一个不同的对象。好的,那么如何在正常函数中获取arrow函数中的数据?使用函数声明或表达式(第一个示例),请参阅。
updateCVId:()=> {
return this._id; //return undefined
}
'click .foo': function(evt, tmp) {
console.log(this._id); //log the real id
}
'click .foo': (evt, tmp)=> {
console.log(this._id); //log undefined
}
var actions = {
//...
updateCVId: function() {
return this._id; //return the real id
}
//...
};
var actions = {
//...
updateCVId() {
return this._id; //return the real id
}
//...
};