Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ES6 Arrow函数正在Meteor.publish中更改此函数的范围_Javascript_Meteor_Ecmascript 6_Meteor Publications - Fatal编程技术网

Javascript ES6 Arrow函数正在Meteor.publish中更改此函数的范围

Javascript ES6 Arrow函数正在Meteor.publish中更改此函数的范围,javascript,meteor,ecmascript-6,meteor-publications,Javascript,Meteor,Ecmascript 6,Meteor Publications,因此,我开始在Meteor中使用ES6,但显然,如果您尝试使用带有箭头函数的Meteor.publish语法,这个.userId是未定义的,而如果您将它与常规的函数({}一起使用,这个.userId工作得很好,我假设这是一种传输过程,将不同的信息分配给userId,但这只是一个猜测,有人知道到底发生了什么吗 Meteor.startup(function() { Meteor.publish("Activities", function() { //with function

因此,我开始在
Meteor
中使用ES6,但显然,如果您尝试使用带有箭头函数的
Meteor.publish
语法,
这个.userId
是未定义的,而如果您将它与常规的
函数({}
一起使用,这个.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
    });
});

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

来自流星:

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


如果你想让事情正常运行,你需要使用“老式”函数语法来允许Meteor正确设置上下文。

来自MDN:“一个箭头函数表达式(也称为胖箭头函数)与函数表达式相比,它的语法更短,并且在词汇上绑定了
this
值。@FelixKling这是一个重复的问题吗?它解释了在arrow函数中
this
是如何工作的。@FelixKling arrow函数在ES6的上下文中是特定的,但我理解您的观点,我认为答案不够宽泛,无法解释从Meteor的角度理解这个概念,你应该重新评估你的决定。它被称为“箭头函数”,而不是“胖箭头函数”。你完全正确:)虽然胖箭头背后有一个强大的口语权重。我会更新!谢谢“一个箭头函数表达式(也称为胖箭头函数)…”-MDN