Преимущество использования Object.create
Похоже, но отличается от этого вопроса. Код ниже взят из JavaScript: Полное руководство. Он в основном определяет метод наследования, который откладывается до Object.create, если он существует, в противном случае он выполняет обычное наследование старого JavaScript с помощью конструкторов и обменивается прототипами.
Мой вопрос таков: поскольку Object.create не существует во многих распространенных браузерах IE, какой смысл даже пытаться его использовать? Это, конечно, загромождает код, и один из комментаторов по предыдущему вопросу упомянул, что Object.create не слишком быстрый.
Так в чем же преимущество при попытке добавить дополнительный код, чтобы иногда использовать эту функцию 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.
}
1 ответ
Разница в скорости не очень заметна, поскольку по своей природе вы, вероятно, не будете создавать слишком много объектов (сотни, даже тысячи - это не то, что я часто называю), а если да, то скорость - это критическая проблема, которую вы, вероятно, выиграли ". Если бы не кодирование в JS, и если оба вышеперечисленных факта неверны, то я уверен, что в нескольких выпусках всех популярных движков JS разница будет незначительной (это уже имеет место в некоторых).
В ответ на ваш вопрос, причины не связаны со скоростью, а потому что Object.create
предпочтительнее старого метода (по причинам, изложенным в этом и других ответах). Они позволяют правильно использовать атрибуты свойств ES5 (которые обеспечивают более масштабируемые объекты и, следовательно, более масштабируемые приложения) и могут помочь с иерархиями наследования.
Это передовой инжиниринг. Если бы мы взяли черту "ну, это не везде реализовано, так что давайте не промокнем", все будет двигаться очень медленно. Напротив, раннее и амбициозное внедрение помогает отрасли двигаться вперед, помогает лицам, принимающим бизнес-решения, поддерживать новые технологии, помогает разработчикам улучшать и совершенствовать новые идеи и поддерживающие структуры. Я сторонник раннего (но осторожного и все еще обратно-совместимого) усыновления, потому что опыт показывает, что ожидание достаточного количества людей для поддержки технологии может заставить вас ждать слишком долго. Пусть IE6 будет уроком для тех, кто думает иначе.