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
   }
   //...
};