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