isPrototypeOf все еще может использоваться в комбинированном случае. За исключением того, что каждый объект может быть только по типу.

рация

Почему мы строим цепочку наследования прототипов, а не используем композицию объектов. Просмотр прототипа для каждого шага в цепочке становится дорогим.

Вот некоторый пример кода:

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 Есть ли явные преимущества использования наследования над композицией?

Ответы на вопрос(3)

Ваш ответ на вопрос