Javascript Prototypal экземпляр против псевдоклассической реализации
Я прочитал несколько других статей о прототипах против псевдоклассической инстанции и у меня все еще есть несколько вопросов. Я включил код ниже для иллюстрации.
Вопросы:
- Человек фактически такой же, как человек?
- Джон и Алиса по сути одинаковы?
- Какие побочные эффекты могут возникнуть в результате одного пути против другого?
Существуют ли какие-либо существенные проблемы с производительностью, о которых мне следует знать?
var Person = function() { hopes: function(){}, dreams: function(){} }; var John = Object.create(Person); // not supported in older browsers
-
var Human = function() { }; Human.prototype.hopes = function(){}; // could add both hopes & dreams with an object Human.prototype.dreams = function(){}; var Alice = new Human();
1 ответ
Ваш синтаксис немного отличается в первом примере, но да, это приведет к объектам, которые похожи. В первом примере это должно быть:
var Person = {
hopes: function(){},
dreams: function(){}
};
Хотя есть некоторые тонкие различия. С использованием new
ключевое слово вызывает добавление объекта в цепочку прототипов, например Alice
теперь будет использовать Human
Прототип цепи. Object.create
устанавливает прототип объекта в параметр, например Person
является John
прототип. Как правило, они будут похожи, за исключением случаев, когда вы делаете Object.create(null)
, в этом случае вы не получите базовый прототип объекта, как если бы вы сделали новый Object();
Вы можете запустить тесты производительности здесь http://jsperf.com/obj-create-vs-new/4