“粗箭头”(=>)何时绑定到“this”实例

2024-03-01

粗箭头可以在不同的设置中使用,但不知何故却不能 始终绑定到我想要的实例。


粗箭头绑定3次

  1. 声明方法时
  2. 在方法内声明函数时
  3. 在全局上下文中声明函数时

1.声明方法时

当 Coffeescript 编译器遇到以下语法模式时 在类声明中

class A
    somemethod: (paramlist) =>

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

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

也就是说该实例的定义将覆盖初始分配 具有函数的绑定版本

2. 在方法内声明函数时

当您在方法中定义带有粗箭头的函数时,Coffeescript 编译器 自动创建闭合和阴影this将外部方法放入变量中_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();
    };
};

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

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

如果您定义一个自由浮动函数(意味着作为类中的方法而不是另一个函数/方法中的方法),就像这样

foo = => @bar

那么相应的Javascript就会是这样的

var foo,
  _this = this;

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

有趣的是this正在分配给 _this这使得能够定义foo关闭 _this.

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

Warning:无论如何,您不应该定义任何访问全局上下文的函数。这会带来麻烦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“粗箭头”(=>)何时绑定到“this”实例 的相关文章

  • Backbone 和 CoffeeScript 入门

    我认为这更多的是咖啡脚本 http coffeescript org 问题 我希望能够使用来自Backbone http documentcloud github com backbone in a foo coffee文件 我尝试使用 r
  • PhantomJS 多个页面的意外加载行为

    我有一个脚本 如下 可以通过 3 个步骤来抓取网站 当设置为一次最多一页时效果很好 然而 当我将其增加到一次 2 个时 事情开始变得不稳定 onFinished 的触发时间比我预期的要早 并且页面尚未完全加载 因此 我的脚本的其余部分被破坏
  • 是否可以获得“this”指针的地址?

    我读到了this是一个右值 我们无法通过应用来获取它的地址 this 在我的代码中 我尝试使用引用绑定this 我想知道哪种方式可以给出地址this 还是两者都错了 到底是什么this 左值 右值 关键字还是其他什么 void MyStri
  • 使用护照进行 Node.js 用户身份验证

    使用序列化函数更新了代码 仍然重定向到 failedRedirect 我试图使用护照包进行简单的用户名 密码身份验证 但失败了 在下面的示例中 我尝试通过基本上始终返回有效的身份验证 无论通过什么 来验证身份验证是否有效 但由于某种原因它失
  • 是否有必要在递归调用的计时器内清除Timeout?

    是否需要打电话clearTimeout 在 Coffeescript 中的递归调用函数中 我关心的是是否不打电话clearTimeout 如果此函数每秒运行很多次 随着时间的推移 可能会导致某种内存泄漏 我的想法是 JS 垃圾收集器处理这个
  • Mongoose:Coffeescript 中的递归嵌入文档

    基于这个例子 https github com LearnBoost mongoose blob master examples schema js 有效 var Comment new Schema Comment add title t
  • Rails 中的共享 JS(咖啡)

    如果我想在不同文件之间共享一些 JavaScript 函数应用程序 资产 javascript组织目录结构的最佳方法是什么 假设我有共享 js 咖啡 sharedFunction gt Hello 现在 我如何在其他地方使用它 就像这里一样
  • ES6 类中的 ES6 函数、箭头函数和“this”[重复]

    这个问题在这里已经有答案了 class App extends Component constructor props onChange e gt this setState term e target value onSubmit e e
  • 在什么情况下“this”指针被传递给类方法? [复制]

    这个问题在这里已经有答案了 我正在阅读 this 指针 我想我比原来更了解它 但我仍然需要一些澄清 所以 根据我的理解 如果你有 class Simple private int m nID public Simple int nID Se
  • 在java构造函数中传递“this”

    查看以下代码 public class ClassA private boolean ClassAattr false public ClassA ClassAHandler handler new ClassAHandler this p
  • 我也可以在客户端使用 Coffeescript 吗?

    有没有办法在客户端使用CoffeeScript 有两种方法 将 CoffeeScript 编译为 JavaScript 并像部署任何 JavaScript 文件一样部署它 或者 Use coffee script js https coff
  • JavaScript 丢失带有私有/公共属性的“this”对象引用

    我在运行以下页面时出现以下错误 this testpublic 不是一个函数 test function var testprivate function this testpublic this testpublic function c
  • 何时在 Java 中使用“this”

    我为我的琐碎且可能愚蠢的问题道歉 但我对在使用方法或访问某些内容时何时使用 this 前缀感到有点困惑 例如 如果我们看 4 这里 http apcentral collegeboard com apc public repository
  • 使用 CoffeeScript 以编程方式检查复选框

    如何以编程方式检查 Coffeescript 中的复选框 我知道在 Javascript 中 我可以使用这个 myElement checked true 我可以在 Coffeescript 中执行类似以下操作吗 myElement che
  • JavaScript 中的“onclick”和“this”

    我很困惑 为什么内联onclick我们要写onclick hello 而在JS中我们应该写btn onclick hello或者btn addEventListener click hello 对于常规函数 为什么在内联onclick中 t
  • Typescript 中此子范围的问题

    This is ALMOST和其他人一样this到目前为止 我已经读过范围界定问题 除了一个细微的差别之外 这使得提出这个问题变得有意义 imo 现在最初我的问题是范围this使用 Knockout 和 Typescript 因此给出以下内
  • “箭头函数”和“函数”是否等效/可互换?

    ES2015中的箭头函数提供了更简洁的语法 我现在可以用箭头函数替换所有函数声明 表达式吗 我需要注意什么 例子 构造函数 function User name this name name vs const User name gt th
  • JavaScript 中的“this”如何工作?

    我知道还有其他几篇关于这个主题的帖子 但它们仍然让我感到困惑 我已经包含了 jQuery 和所有内容 我有一个简单的 javascript 类 如下例所示 function CarConstructor this speed 19 in m
  • Node.js 主机名/IP 与证书的替代名称不匹配

    我正在编写一些节点代码来进行 Facebook 的服务器端登录 我已经非常接近让它完全发挥作用了 但是我在请求 auth code 时遇到了麻烦 我认为这可能与 Facebook 应用程序设置有关Site URL但我尝试过的都没有成功 我使
  • 如何获取调用函数的“this”值?

    如果我有一个这样的函数 function foo this console log this function bar bar prototype func function foo this var test new bar test f

随机推荐

  • #if 在 java 中,就像在 c 预处理器中一样 [重复]

    这个问题在这里已经有答案了 可能的重复 如何标记java代码使其不被编译 https stackoverflow com questions 8293124 how to mark java code such that its not c
  • 获取Excel输入框方法的hwnd

    我想我有一个相当简单的问题 我正在寻找一种获取 Excel 输入框的 hwnd 的方法 我正在自动化一个流程 我注意到 8 类输入框始终位于 Excel 窗口下方 我正在从另一个应用程序自动化 Excel 如果这有帮助的话 显然 我希望它显
  • 如何包含 TypeReference ProGuard 规则

    我已经包含以下行以将所有文件保存在包内 keep class com fasterxml 我收到以下异常 Caused by java lang IllegalArgumentException Internal error TypeRef
  • 如何检查字符串是否代表数字(浮点型或整数)?

    如何在 Python 中检查字符串是否代表数值 def is number s try float s return True except ValueError return False 上面的方法有效 但看起来很笨拙 If what y
  • 在 Visual Studio 中跨项目添加和删除多个引用

    我有一个包含超过 50 或 60 个 csproj 文件的庞大项目 我需要删除 6 或 7 个现有引用 并在所有这些项目中添加 10 或 15 个新引用 是否有批量添加引用和删除引用的机制 或者 如果有一种方法可以说 在所有项目中用 Y 替
  • 国家/州动态下拉列表

    如果你去http profile microsoft com http profile microsoft com并编辑您的个人信息 您将选择您所在的国家 地区 选择一个国家 地区后 城市和 或州信息会根据该国家 地区的预期发生变化 有人有
  • 通过管道连接 popen stderr 和 stdout

    我想通过 python 从目录调用脚本 它们是可执行的 shell 脚本 到目前为止 一切都很好 for script in sorted os listdir initdir reverse reverse if script endsw
  • python -m SimpleHTTPServer - 监听 0.0.0.0:8000 但 http://0.0.0.0:8000/test.html 给出“找不到页面”

    cd 到我的文件夹后 我输入 python m SimpleHTTPServer and get Serving HTTP on 0 0 0 0 port 8000 回复 但当我击中http 0 0 0 0 8000 test html我收
  • JPA/Hibernate 有条件一对多关系?

    我正在使用 Hibernate Tools 直接从数据库生成 DAO 和类 数据库中有两张表 表A和B A到B之间存在一对多关系 B中的多行映射到单个A 在A A类 的生成代码中 有B类的集合 体现了一对多的关系 但是 我不需要 B 中属于
  • 从 ejs 模板生成静态 HTML 文件

    好的 我已经启动并运行了我的基本 Nodejs 网站 这一切都正常工作并通过节点服务器运行 使用我的基本节点站点 https github com andrewbrandwood node basic site 它使用 ejs 作为模板引擎
  • Java 中内存分配的典型速度是多少?

    我正在分析一个 Java 应用程序 发现对象分配的速度比我预期的要慢得多 我运行了一个简单的基准测试来尝试确定小对象分配的整体速度 我发现在我的机器上分配一个小对象 3 个浮点数的向量 似乎需要大约 200 纳秒 我在 双核 2 0 GHz
  • Json.NET:反序列化嵌套字典

    将对象反序列化为Dictionary JsonConvert DeserializeObject
  • openerp中的父左和父右

    什么是父左和父右 它是如何运作的Openerp Thanks 正如拉斐尔 科莱 Raphael Collet 所解释的那样他关于 OpenERP Server 的回答 https answers launchpad net openobje
  • 如何使用 WebStorm 进行 Chrome 扩展开发?

    我刚刚购买了 WebStorm 5 到目前为止一直非常喜欢它的检查功能 我在开发 Chrome 扩展程序时遇到的一个问题是它无法识别chrome多变的 有什么办法可以添加chrome变量到检查器以便它可以在我键入时自动完成 我猜我需要添加
  • SurfaceTexture updateTexImage 共享 2 个 EGLContext - Android 4.4 上的问题

    我指的是这个关于如何将相机的预览帧直接编码到 mp4 文件中的优秀示例 http bigflake com mediacodec CameraToMpegTest java txt http bigflake com mediacodec
  • 这不知何故冻结了我的整个程序,我不确定为什么?

    所以我在线程上运行所有内容run and not run按预期工作 但是running不打印 我尝试调用它 status text Working print run process 但这只会冻结我的整个程序 我也尝试放入root afte
  • 如何在SAPUI5中自定义Shell容器[重复]

    这个问题在这里已经有答案了 我有一个外壳容器 在大屏幕上我想充分利用屏幕 我想覆盖整个区域 我如何定制它 我假设您正在使用 XML 来表达您的观点 添加以下属性appWidthLimited false 到 Shell 标签
  • 如何从我的位置在 Google Maps API V2 中绘制路线 [重复]

    这个问题在这里已经有答案了 我想进行方向应用 但是 我在绘制从我的位置到目的地的路线时遇到问题 我从我的位置获取变量经度和纬度 但我不知道画线 我想绘制到该位置的方向 6 984873352070259 108 48140716552734
  • 从 MediaStream 对象获取媒体详细信息(分辨率和帧速率)

    我正在捕获用户的相机 我想以尽可能最佳的分辨率捕获图片 所以我的代码类似于下面的代码片段 我想从传入流中读取分辨率详细信息 因此我可以将其设置为视频高度和宽度 我将用它来单击快照 我希望快照具有流提供的最佳质量 这可能吗 读取分辨率详细信息
  • “粗箭头”(=>)何时绑定到“this”实例

    粗箭头可以在不同的设置中使用 但不知何故却不能 始终绑定到我想要的实例 粗箭头绑定3次 声明方法时 在方法内声明函数时 在全局上下文中声明函数时 1 声明方法时 当 Coffeescript 编译器遇到以下语法模式时 在类声明中 class