-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
After modification of module.coffee/@DeleGate like:
# Add methods on this prototype that point to another method
# on another object's prototype.
@delegate: (args...) ->
name = if args.length > 2 then args.pop() else null
target = args.pop()
source = args.pop()
name = source if not name
@::[name] = target::[source]
It could work like this:
{Module} = require 'coffeescript-module'
class Foo extends Module
log: -> console.log 'Foo!'
class Bar extends Module
@delegate 'log', Foo, 'foo'
log: -> console.log 'Bar!'
class Baz extends Bar #Module
#@includes Bar
@delegate 'log', Bar, 'bar'
#@includes Foo
@delegate 'log', Foo, 'foo'
foo = new Foo()
foo.log() #calls Foo::log() > Foo!
bar = new Bar()
bar.log() #calls Bar::log() > Bar!
bar.foo() #calls Foo::log() > Foo!
baz = new Baz()
baz.log() #calls Bar::log() > Bar!
baz.bar() #calls Bar::log() > Bar!
baz.foo() #calls Foo::log() > Foo!
Metadata
Metadata
Assignees
Labels
No labels