Преимущество использования 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 будет уроком для тех, кто думает иначе.

Другие вопросы по тегам