Object.create()

Стандарт ECMAScript 5 определяет метод Object.create(), который создает новый объект и использует свой первый аргумент в качестве прототипа этого объекта. Дополнительно Object.create() может принимать второй необязательный аргумент, описывающий свойства нового объекта.

Этот метод очень удобен, так как позволяет вам указывать объект прототип для нового вашего объекта без определения функции конструктора.

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

var o1 = Object.create({x:1, y:2}); // o1 на­сле­ду­ет свой­ст­ва x и y

Чтобы создать объект, не имеющий прототипа, можно передать значение null, но в этом случае вновь созданный объект не унаследует ни каких-либо свойств, ни базовых методов, таких как toString() (а это означает, что этот объект нельзя будет использовать в выражениях с оператором +):

var o2 = Object.create(null); // o2 не на­сле­ду­ет ни свойств, ни ме­то­дов

Если в программе потребуется создать обычный пустой объект (который, например, возвращается литералом {} или выражением new Object()), передайте в первом аргументе Object.prototype:

var o3 = Object.create(Object.prototype); // o3 по­до­бен объ­ек­ту, соз­дан­но­му
 // с по­мо­щью {} или new Object().

Эмуляция Object.create для IE8-

ВызовObject.create(proto), который создаёт пустой объект с данным прототипом, можно эмулировать, так что он будет работать во всех браузерах, включая IE6+.

Кросс-браузерный аналог —inheritсостоит буквально из нескольких строк:

function inherit(proto) {
  function F() {}
  F.prototype = proto;
  var object = new F;
  return object;
}
  1. Создана новая функцияF. Она ничего не делает с this, так что вызов new Fвернёт пустой объект.
  2. Свойство F.prototypeустанавливается в будущий прототип proto;
  3. Результатом вызова new Fбудет пустой объект с __proto__равным значению F.prototype.

  4. Готово! Мы получили пустой объект с заданным прототипом.

Результат вызоваinherit(animal)идентиченObject.create(animal). Это будет новый пустой объект с прототипомanimal.

var animal = { eats: true };

var rabbit = inherit(animal);

console.log(rabbit.eats); // true

results matching ""

    No results matching ""