perf
为什么我们构建一个原型继承链,而不是使用对象组合.通过原型查看链中的每个步骤都是昂贵的.
这是一些虚拟示例代码:
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);
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以外,使用遗传比组合有明显的优势吗?