Coffeescript实例方法封装在Object中

时间:2014-12-06 01:50:00

标签: javascript coffeescript

说我有一个Coffeescript课程:

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

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

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

所以我可以致电:

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

问题在于this(或@)不是像常规方法那样执行的实例。

我正在尝试为清洁混合/关注做这件事。

谢谢, 埃里克

1 个答案:

答案 0 :(得分:1)

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

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

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