Мне всегда нравится помнить, что object.Create - это один из вариантов, а не единственный способ достижения неклассического наследования в javascript.
Для себя я всегда считаю, что Object.create работает лучше всего.когда я хочу наследовать элементы из цепочки прототипов родительских объектов (то есть методы, которые я хотел бы иметь возможность применять к наследующему объекту).
-
Для простого наследования "Собственного имущества" Object.create в основном не требуется.Когда я хочу наследовать собственные свойства, я предпочитаю использовать популярные шаблоны Mixin & Extend (которые просто копируют собственные свойства одного объекта в другой, не беспокоясь о прототипе или "новом"),
В книге Стояна Стефанова "Шаблоны Javascript" он приводит пример функции глубокого расширения, которая выполняет то, что вы ищетерекурсивно и включает поддержку свойств, которые являются массивами, а также стандартными объектами ключ / значение:
function extendDeep(parent, child){
var i,
toStr = Object.prototype.toString,
astr = "[object Array]";
child = child || {};
for (i in parent) {
if (parent.hasOwnProperty(i)) {
if (typeof parent[i] === "object") {
child[i] = (toStr.call(parent[i]) === astr) ? [] : {};
extendDeep(parent[i], child[i]);
} else {
child[i] = parent[i];
}
}
}
return child;
}
Если вы используете jQuery, jQuery.extend () имеет необязательный параметр "глубокий аргумент, который позволяет вам расширить объект почти идентичным способом.