Почему мы создаем цепочку наследования прототипа, а не используя композицию объекта. Поиск прототипа для каждого шага в цепочке становится дорогим.
Вот пример кода-примера:
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);
использует pd
, поскольку дескрипторы свойств являются подробными как ад.
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
существуют ли явные преимущества использования наследования над композицией?