новый SomeFunction ()
авно наткнулся наObject.create()
метод в JavaScript, и я пытаюсь понять, чем он отличается от создания нового экземпляра объекта сnew 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()
синтаксис, как вы бы с функциональным синтаксисом. Это логично, учитывая объем лексического (против блочного) типа JavaScript.Являются ли приведенные выше утверждения правильными? И я что-то упустил? Когда бы вы использовали один поверх другого?
РЕДАКТИРОВАТЬ: ссылка на jsfiddle версию приведенного выше примера кода:http://jsfiddle.net/rZfYL/