Coffeescript:从同一对象中的函数调用数组函数

凯尔G

我正在尝试为Atom文本编辑器编写一个程序包,在主类(init.coffee)中,我的module.exports内部有一个数组:

servers: []

我想从module.exports另一部分中的函数访问此数组,但是遇到了麻烦。

功能:

stas: () ->
    dir = getFilePath()
    d = fs.statSync dir
    if !d.isDirectory()
        dirError dir
    else
        s = new Server dir
        s.init()
        @servers.push s
    return

我不断收到此错误:

Uncaught TypeError: this.servers.push is not a function

我这样调用该函数:

@events.add atom.commands.add ".tree-view", {
  'atom-together:startServer': @stas
  'atom-together:startClient': @stac
  'atom-together:stopServer': @stos
  'atom-together:stopClient': @stoc
}

在coffeescript中调用此数组的正确方法是什么?

亩太短

JavaScript / CoffeeScript函数内部this(AKA @通常取决于调用方式,而不取决于定义位置。同样,@stas它只是对该stas函数的引用,并且this将成为调用该函数时调用者希望它成为的对象。

如果在回调函数中需要特定的@(AKA this),则可以将其定义为绑定函数

stas: () => # Note the => instead of ->
  #...

或在将其Function.prototype.bind传递给事件系统时使用它进行绑定

@events.add atom.commands.add ".tree-view", {
  'atom-together:startServer': @stas.bind(@)
  #...
}

另外,如果您要servers: []在类级别进行如下定义

class C
  servers: []

那么您将servers在类的所有实例之间共享一个数组,而这可能并不是您想要的。在类级别定义的事物通过原型在所有实例之间共享。例如:

class C
  a: [ ]

c1 = new C
c2 = new C
c1.a.push 11
console.log c1.a, c2.a

会将两个[11]s放入控制台,因为c1.ac2.a是相同的数组。通常,最好在您的变量中定义可变值,constructor以避免这种共享(除非您特别希望发生这种情况);这个版本:

class C
  constructor: (@a = [ ]) ->

c1 = new C
c2 = new C
c1.a.push 11
console.log c1.a, c2.a

在控制台中为您提供[11][]通常这就是您要寻找的行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从对象,JavaScript中同一对象的其他函数的内部调用函数?

调用嵌套函数到同一对象

我可以从同一对象javascript中调用私有函数吗

在管道中的同一对象上调用两个不同的函数(%>%)

获取位于同一对象中的函数的引用

访问同一对象函数中的变量

在 jQuery 中的同一对象上调用另一个函数中定义的函数

Javascript对象。如何创建一个在同一对象内调用函数的按钮

从Javascript的同一对象中使用setTimeout函数调用对象方法

如何在以下C ++代码中的同一对象上调用default并复制构造函数?

PHP函数“ overloops”数组返回同一对象的多个实例

如何模拟更新同一对象的函数/方法?

如何模拟在python中写入同一对象的对象函数?

从同一对象的不同实例中触发另一个实例的函数

在同时运行的两个函数中访问同一对象的属性

python如何执行调用函数的对象方法,该函数从同一对象调用另一个方法

有没有一种方法可以用同一行在同一对象上调用多个函数?

打字稿。正确键入依赖于同一对象文字中属性的函数参数

从同一对象内部访问对象内部的数组

JOLT 转换构建对象数组,将同一对象中的属性分组

从两个数组中获取同一对象的数组

不能多次调用同一对象的方法PHP

Linq合并来自同一对象实例的数组

从不同的罐子中删除重复的代码来调用同一对象

访问同一对象中的对象属性

Java中同一对象内的对象列表

比较同一对象中的 2 个数组键和值

数组中的所有对象(从csv解释)都作为同一对象(最后一个对象)返回

在Java中销毁对同一对象的多个引用