<code>
// 使用Proxy实现propotypal inheritance
function MultiPrototype(...prototypes){
var chain = [{}, ...prototypes]
return new Proxy(chain[0], {
get: function(target, name){
for (let obj of chain){
if (name in obj) return obj[name]
}
},
has: function(target, name){
for (let obj of chain){
if (name in obj) return true
}
return false
}
})
}
EventMonkey = MultiPrototype({
Object.create(Monkey.prototype),
Object.create(Event.prototype),
})
</code>
<code>
//ES5 实现propotypal inheritance
Object.spawn = function(parent, props){
var defs={}
for(var key in props){
if(props.hasOwnProperty(key)){
defs[key] = {
value: props[key],
enumerable: true
}
}
}
return Object.create(parent, defs)
}
function Point(x,y){
return {
x: x,
y: y
}
}
var point = Point(100, 100)
var colorPoint = Object.spawn(point, {color: "red"})
Object.create(point, {color:{value: "red"}})
</code>
<code>
//ES5 实现propotypal inheritance
Object.spawn = function(parent, props){
var sub = Object.create(parent)
for (var key in props){
if(props.hasOwnProperty(key)){
sub[key] = props[key]
}
}
return sub
}
</code>
网友评论