perf http://jsperf.com/object-inheritance-vs-object-composition
为什么我们要构建原型继承链而不是使用对象组合。查找链中每一步的原型都非常昂贵。
这是一些虚拟示例代码:
var lower = {
"foo": "bar"
};
var upper = {
"bar": "foo"
};
var chained = Object.create(lower, pd(upper));
var chainedPrototype = Object.create(chained);
var combinedPrototype = Object.create(pd.merge(lower, upper));
var o1 = Object.create(chainedPrototypes);
var o2 = Object.create(combinedPrototypes);
uses pd https://github.com/Raynos/pd#Documentation因为属性描述符非常冗长。
o2.foo
那么更快o1.foo
因为它只上升两个原型链而不是三个。
既然沿原型链向上移动的成本很高,为什么我们要构造一个原型链而不是使用对象组合呢?
另一个更好的例子是:
var Element = {
// Element methods
}
var Node = {
// Node methods
}
var setUpChain = Object.create(Element, pd(Node));
var chained = Object.create(setUpChain);
var combined = Object.create(pd.merge(Node, Element));
document.createChainedElement = function() {
return Object.create(chained);
}
document.createCombinedElement = function() {
return Object.create(combined);
}
我没有看到任何代码为了提高效率而合并原型对象。我看到很多代码构建链式原型。为什么后者更受欢迎?
我能想到的唯一原因是使用Object.isPrototypeOf
测试链中的各个原型。
除了isPrototypeOf
使用继承相对于组合有明显的优势吗?