pooka
v0.2.0
Published
A proxy driven Traits implementation
Downloads
4
Readme
Pooka
npm install pooka
to use this module you have to pass Node.js the --harmony_proxies
V8 flag
% node --v8-options | grep proxies
--harmony_proxies (enable "harmony proxies" (in progress))
Traits reimagined using ES6 Proxies.
Mostly a thought experiment for now, but as Proxies become more battle-tested, it could become a useful pattern.
This implementation lazily constructs implemented Traits.
The last Trait to implement a method is the one that is evaluated.
import Traits from 'pooka'
class Wheels {
constructor (number = 4) {
// this will be private since it isn't on the prototype
this.n = number
}
drive () { return true }
// these will be public properties
get wheels () { return this.n }
get sinks () { return true }
}
class Storage {
constructor (type) {
// these two properties are also private
this.type = type
this.contents = []
}
add (thing) {
this.contents.push(thing)
}
}
class Wings {
fly () { return true }
}
class Amphibious {
get sinks () { return false }
}
class Airplane extends Traits {}
// Arguments are curried for instantiation
Airplane.implements(Storage, 'cargo')
Airplane.implements(Wheels, 3)
Airplane.implements(Wings)
class Car extends Traits {}
Car.implements(Storage, 'trunk')
Car.implements(Wheels/*, 4 as default */)
// Multiple levels of inheritance
class Amphicar extends Traits {}
Amphicar.implements(Car)
// override Wheels.prototyope.sinks
Amphicar.implements(Amphibious)
class Bike extends Traits {}
Bike.implements(Storage, 'basket')
Bike.implements(Wheels, 2)
class Semi extends Traits {}
Semi.implements(Storage, 'trailer')
Semi.implements(Wheels, 18)
car.fly() // new Error('Vehicle does not implement fly')