当确实“胖箭头”(=>)结合“该”实例当确实“胖箭头”(=>)结合“该”实例(When

2019-05-12 06:28发布

脂肪箭头可以在不同的环境中使用,但它在某种程度上并不总是绑定到我想要的实例。

Answer 1:

脂肪箭头键合在3次

  1. 声明的方法时
  2. 方法中的声明一个函数时
  3. 宣布在全球范围内的函数时

1.当声明的方法

当CoffeeScript的编译器encouters类声明中的以下句法模式

class A
    somemethod: (paramlist) =>

这将产生A类的构造函数中的以下代码

this.somemethod = __bind(this.somemethod, this);

这是该实例的定义与功能的结合版本覆盖初始分配

2.当声明的方法中的一个函数

当你的方法中定义与脂肪箭头的函数的CoffeeScript编译器自动创建一个封闭和和阴影外方法的入变量_this。 内部函数内@任何引用将使用该变量_this在生成JavaScript代码

somemethod: ->
   => @someCall()

这是相应的JavaScript

A.prototype.somemethod = function() {
    //_this references this
    var _this = this;
    return function() {
        //and _this is now used within the inner function
        return _this.someCall();
    };
};

函数的无脂肪的箭头A定义不创建封你。

3.委员会宣布在全球范围内的函数

如果你定义一个自由浮动的功能(指在一类,而不是在另一个函数/方法的方法)就这样

foo = => @bar

然后相应的JavaScript看起来像这样

var foo,
  _this = this;

foo = function() {
    return _this.bar;
};

有趣的事情在这里再次的是, 是被分配到_ 使foo的定义,关闭了 _。

然而最重要的部分是, 一直是你的执行环境的全球背景。 如果你是在浏览器中这将是窗口对象。 如果你正在运行的node.js这将是你是刚刚运行的模块。

警告:你不应该定义反正你的访问全球范围内的任何功能。 这需要麻烦。



文章来源: When does the “fat arrow” (=>) bind to “this” instance