2014-12-06 27 views
0

说我有一个CoffeeScript的类:CoffeeScript的实例方法封装

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

有什么办法来封装这样的方法(不工作):

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

所以我可以打电话:

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

问题是this(或@)当我是不是实例像常规方法那样做。

我正在尝试做这个清洁mixin /关注。

感谢, 埃里克

回答

1

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

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

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

+0

哦,好的。谢谢! – 2014-12-06 02:53:39