Похож на, но отличается от this question. Код ниже от JavaScript: The Definitive Guide. Он в основном определяет метод наследования, который отклоняет Object.create, если он существует, в противном случае делает обычное старое наследование Javascript, используя конструкторы и обменивая прототипы.Преимущество использования Object.create
Мой вопрос в том, что Object.create не существует на
много общих браузеров
IE, в чем смысл даже его использовать? Это, безусловно, загромождает код, и один из комментаторов по предыдущему вопросу отметил, что Object.create isn't too fast.
В чем преимущество при попытке добавить дополнительный код, чтобы иногда использовать эту функцию ECMA 5, которая может быть или не быть медленнее, чем «старый» способ сделать это?
function inherit(p) {
if (Object.create) // If Object.create() is defined...
return Object.create(p); // then just use it.
function f() {}; // Define a dummy constructor function.
f.prototype = p; // Set its prototype property to p.
return new f(); // Use f() to create an "heir" of p.
}
Это действительно полезный ответ; Я вижу, почему создание было бы предпочтительнее, поскольку оно дает вам большой контроль над свойствами в созданном объекте. Я могу понять, почему вы хотите сказать «var bob = Object.create (userB, {« id »: {значение: 12, enumerable: false» и т. Д., Но этот код не будет сильно силен в IE9 и ниже «Не будет ли такое кодирование ограничено (замечательными) ситуациями, когда вы можете управлять браузером, который используют ваши пользователи? –
Другими словами, в IE8 мне не только понадобится получить мой новый унаследованный метод, используя старый JS метод обхода прототипов вокруг, но мне также придется изменить объект, который передан, чтобы служить в качестве «дочернего» объекта, который наследуется от userB. Вместо '{« id »: {значение: 12, перечислимое: false 'мне не понадобится' {"id": 12, "name": "bob" и т. д. –
@AdamRackis, это правда, код как есть не обратно совместим, но я уверен, что есть проекты, которые пытаются и упрощают эти вещи, а если нет, это хорошая идея. Автоматизировать эти изменения было бы нелегко. – davin