说我有一个Coffeescript课程:
class Foo
MyMethodsBar: () => "bar"
MyMethodsBaz: () => "baz"
有没有办法封装像这样的方法(不工作):
class Foo
MyMethods:
bar: () => "bar"
baz: () => "baz"
所以我可以致电:
f = new Foo()
f.MyMethods.bar()
问题在于this
(或@
)不是像常规方法那样执行的实例。
我正在尝试为清洁混合/关注做这件事。
谢谢, 埃里克
答案 0 :(得分:1)
不,这是不可能的,除非你在构造函数中创建MyMethods
并将this
绑定到方法。在这一点上,你几乎没有使用类的好处。
这是因为当您通过f.MyMethods.bar()
调用方法时,this
会引用f.MyMethods
。为了防止这种情况,您可以事先将bar
绑定到特定对象。但是,在您定义bar
时,Foo
应该引用的this
实例(f
)尚不存在,因此您可以'把它绑在构造函数之外。
您可以使用f.MyMethods.bar.call(f)
调用该方法,但这相当麻烦。