【问题标题】:Coffeescript instance method encapsulation in an ObjectCoffeescript 实例方法封装在 Object 中
【发布时间】:2014-12-06 10:14:48
【问题描述】:

假设我有一个 Coffeescript 课程:

class Foo
  MyMethodsBar: () => "bar"
  MyMethodsBaz: () => "baz"

有没有办法封装这样的方法(不工作):

class Foo
  MyMethods:
    bar: () => "bar"
    baz: () => "baz"

所以我可以打电话:

f = new Foo()
f.MyMethods.bar()

问题是this(或@)不是我像常规方法一样执行此操作的实例。

我正在尝试这样做是为了更清洁的 mixins/关注点。

谢谢, 埃里克

【问题讨论】:

    标签: javascript coffeescript


    【解决方案1】:

    不,这是不可能的,除非您在构造函数中创建 MyMethods 并将 this 绑定到方法。在这一点上,您几乎失去了使用类的好处。

    那是因为当您通过f.MyMethods.bar() 调用方法时,this 将引用f.MyMethods。为防止这种情况,您可以事先将bar 绑定到特定对象。但是,在您定义bar 的那一刻,this 应该引用的Foo 的实例(f)还不存在,因此您不能将它绑定到构造函数之外。

    您可以使用f.MyMethods.bar.call(f) 调用该方法,但这相当麻烦。

    【讨论】:

      猜你喜欢
      • 2011-07-16
      • 1970-01-01
      • 2012-06-16
      • 1970-01-01
      • 2011-09-26
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多