ES6的箭头函数在Meteor.publish中改变了它的作用域



所以我开始在Meteor中使用ES6,但显然,如果你尝试使用带有箭头函数的Meteor.publish语法,this.userId是未定义的,而如果你使用它与常规function(){} this.userId完美工作,我假设是一种分配不同的转译器过程,到userId但只是猜测,有人知道真正发生了什么吗?

Meteor.startup(function() {
    Meteor.publish("Activities", function() { //with function
        console.log(this.userId); //TS8vTE3z56LLcaCb5
    });
});
Meteor.startup(function() {
    Meteor.publish("Activities", ()=> { //with arrow function
        console.log(this.userId); //undefined
    });
});

这不是翻译错误,这是箭头函数的一个特性。箭头函数自动将函数体的上下文设置为它创建时的上下文,在本例中是对Meteor.publish的回调。这可以防止Meteor重新绑定侦听器函数的上下文。

From the Meteor publish docs:

在函数内部,这是发布处理程序对象

如果你想让事情正常工作,你需要使用"老派"函数语法来允许Meteor正确设置上下文

最新更新