Преимущество использования Object.create - PullRequest
10 голосов
/ 21 сентября 2011

Аналогично, но отличается от этого вопроса .Код ниже взят из 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 Ответ

9 голосов
/ 22 сентября 2011

Разница в скорости не очень заметна, поскольку по своей природе вы, вероятно, не будете создавать слишком много объектов (сотни, даже тысячи - это не то, что я часто называю), а если да, то скорость является критической проблемой для вас.вероятно, не будет кодировать в JS, и если оба вышеперечисленных факта неверны, то я уверен, что в нескольких выпусках всех популярных JS-движков разница будет незначительной (в некоторых это уже имеет место).

В ответ на ваш вопрос причины не связаны со скоростью, а потому, что шаблон проектирования из Object.create предпочтительнее старого метода (по причинам, изложенным в том и другомответы).Они учитывают правильное использование атрибутов свойств ES5 (которые обеспечивают более масштабируемые объекты и, следовательно, более масштабируемые приложения) и могут помочь с иерархиями наследования.

Это прямое проектирование.Если бы мы взяли черту «ну, это не везде реализовано, так что давайте не будем промокать», все будет двигаться очень медленно.Напротив, раннее и амбициозное внедрение помогает отрасли двигаться вперед, помогает лицам, принимающим бизнес-решения, поддерживать новые технологии, помогает разработчикам совершенствовать и совершенствовать новые идеи и поддерживающие структуры.Я сторонник раннего (но осторожного и все еще обратно-совместимого) усыновления, потому что опыт показывает, что ожидание достаточного количества людей для поддержки технологии может заставить вас ждать слишком долго.Пусть IE6 станет уроком для тех, кто думает иначе.

...