user.save()
需要指出的是,這里的拷貝是引用拷貝,有可能外部會更改被Mixin的模塊內部值,更好的方法是深層值拷貝(clone),包括JQuery在內的很多類庫都實現(xiàn)了這類擴展方法
extend = (obj, mixin) ->
obj[name] = method for name, method of mixin
obj
include = (klass, mixin) ->
extend klass.prototype, mixin
CoffeeScript里kclass.prototype還可以寫成kclass::, 今天在CoffeeScript in action一書里也看到了類似的一種寫法
class Mixin
constructor: (methods) ->
for own k,v of methods
@[k]=v
#定義include,把所有的方法加入到Target的類里
include: (kclass) ->
for own k,v of @
kclass::[k] =v
上面是定義了一個Mixin的類,constructor 用來記住要混入的方法,include方法則把他們加入到指定類的prototype中去。
new_mixin = new Mixin
method1: -> console.log 'method1'
method2: -> console.log 'method2'
class TestClass
new_mixin.include @ #這樣給TestClass加入了2個新方法, 在CoffeeScript里@就是this的意思
o = new TestClass
o.method1() # method1
更多建議: