【问题标题】:this scope in arrow function prototypes箭头函数原型中的 this 范围
【发布时间】:2016-09-30 04:36:38
【问题描述】:

据我了解,这是行不通的(这是一个人为的示例 - 请参阅 RxJS 了解我实际运行的内容):

function Foo() {
  this.name = 'Johnny Cash'
}

Foo.prototype.who = () => {
  console.log(this.name) // undefined
};

var foo = new Foo();

foo.who()

因为this 没有正确的范围。但是 RxJS 文档上的 this 页面(最后 2 个底部示例)使用它。他们是如何运行这段代码的?

RxJS 页面上的代码不正确吗?还是我需要运行某种 Babel 插件(我已经尝试过运行 babel-require 和 babel-polyfill,效果相同)

【问题讨论】:

  • Foo 和 Emitter 在此示例中完全不相关。可以通过多种方式使foo 对应于this,其中最直接的是Emitter.prototype.who.call(foo)。除此之外,还不清楚您在问什么。
  • 这里也没有一个“箭头函数”。
  • 大声笑。我的错。我试图设计一个例子。错别字已修复
  • 该示例代码确实看起来不对;也许这只是作者的一个错误。
  • @zerkms 很好,如果我运行这个this.name 是未定义的。所以我假设这不在我期望的范围内——也许这是一个更好的措辞。其他类似的 SO 问题似乎同意这是不可能的。那么 RxJS 为什么或如何这样做呢?我正在尝试运行他们的代码,但即使使用 Babel 也无法运行

标签: javascript ecmascript-6 rxjs arrow-functions


【解决方案1】:

该页面上的示例已损坏。

假设它从未像当前发布的那样运行是公平的,因为它在

中存在语法错误
var subcription = emitter.listen('data', data => console.log(`data: ${data}`);

行(不是成对的括号)。

修复并运行后——读取undefined的属性还有其他异常,即前面提到的箭头函数中的this。

【讨论】:

  • 谢谢。我也有同样的怀疑。只是想要一个确认
  • @Yashua 再看一遍后,我注意到我知道作者,我刚刚给他们发了一个指向这个问题的链接:-)
猜你喜欢
  • 1970-01-01
  • 2018-05-04
  • 2020-08-30
  • 2016-01-08
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
  • 2019-02-19
相关资源
最近更新 更多