Недавно я наткнулся на метод Object.create()
в JavaScript и пытаюсь определить, как он отличается от создания нового экземпляра объекта с помощью new SomeFunction()
, и когда вы хотели бы использовать один над другим.Понимание различий между Object.create() и новым SomeFunction()
Рассмотрим следующий пример:
var test = {
val: 1,
func: function() {
return this.val;
}
};
var testA = Object.create(test);
testA.val = 2;
console.log(test.func()); // 1
console.log(testA.func()); // 2
console.log('other test');
var otherTest = function() {
this.val = 1;
this.func = function() {
return this.val;
};
};
var otherTestA = new otherTest();
var otherTestB = new otherTest();
otherTestB.val = 2;
console.log(otherTestA.val); // 1
console.log(otherTestB.val); // 2
console.log(otherTestA.func()); // 1
console.log(otherTestB.func()); // 2
Обратите внимание, что такое же поведение наблюдается в обоих случаях. Мне кажется, что основные различия между этими двумя сценариями:
- Объектом, используемым в
Object.create()
фактически формирует прототип нового объекта, в то время как вnew Function()
от заявленных свойств/функции не образуют прототип. - Вы не можете создавать замыкания с синтаксисом
Object.create()
, как с функциональным синтаксисом. Это логично, учитывая лексический (vs block) тип JavaScript.
Правильность приведенных выше утверждений? И я что-то упускаю? Когда вы будете использовать один над другим?
EDIT: ссылка на jsfiddle версию выше образца коду: http://jsfiddle.net/rZfYL/
См. Также [Использование «Object.create» вместо «new»] (http: // stackoverflow.com/q/2709612/1048572) – Bergi