) 何时绑定(bind)到 "this"实例-6ren"> ) 何时绑定(bind)到 "this"实例-胖箭头可以在不同的设置中使用,但不知何故不能 总是绑定(bind)到我想要的实例。 最佳答案 胖箭绑定(bind)了3次 声明方法时 在方法中声明函数时 在全局上下文中声明函数时 1.声明方法时 当 -6ren">
gpt4 book ai didi

coffeescript - "fat arrow"(=>) 何时绑定(bind)到 "this"实例

转载 作者:行者123 更新时间:2023-12-04 03:29:13 25 4
gpt4 key购买 nike

胖箭头可以在不同的设置中使用,但不知何故不能
总是绑定(bind)到我想要的实例。

最佳答案

胖箭绑定(bind)了3次

  • 声明方法时
  • 在方法中声明函数时
  • 在全局上下文中声明函数时

  • 1.声明方法时

    当 Coffeescript 编译器遇到以下语法模式时
    在类声明中
    class A
    somemethod: (paramlist) =>

    这将在类 A 的构造函数中产生以下代码
    this.somemethod = __bind(this.somemethod, this);

    那就是该实例的定义是覆盖初始分配
    带有函数的绑定(bind)版本

    2.在方法中声明函数时

    当您在方法中定义带有粗箭头的函数时,Coffeescript 编译器
    自动创建闭包和阴影 这个将外部方法放入变量中
    _这个 .对 的任何引用@ 在内部函数中将使用变量 _这个
    在生成的 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();
    };
    };

    没有粗箭头的函数定义不会为您创建该闭包。

    3. 在全局上下文中声明函数时

    如果您像这样定义一个自由 float 函数(意思是类中的方法而不是另一个函数/方法中的方法)
    foo = => @bar

    那么对应的Javascript会是这个样子
    var foo,
    _this = this;

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

    这里再次有趣的是 this 被分配给 _this,这使得 foo 的定义能够关闭 _this。

    然而,重要的部分是这始终是您的执行环境的全局上下文。如果您在浏览器中,它将是窗口对象。如果您正在运行 node.js,它将是您刚刚运行的模块。

    警告:无论如何,您都不应该定义任何访问全局上下文的函数。这需要麻烦。

    关于coffeescript - "fat arrow"(=>) 何时绑定(bind)到 "this"实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13184209/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com