новый 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/

Ответы на вопрос(10)

Ваш ответ на вопрос