В ECMAScript 3 оператор new
был единственным стандартным способом установки внутреннего свойства [[Prototype]]
объекта, в этом случае Крокфорд просто использует временную функцию конструктора F
для этой цели.
Аргумент o
этого метода устанавливается как свойство prototype
временного конструктора, и, вызывая new F();
, он создает новый пустой объекткоторая наследуется от F.prototype
(см. этот вопрос для получения более подробной информации о том, как new
работает).
Например:
var a = { a: 1 };
var b = Object.create(a); // b inherits from a
b.a; // 1
В приведенном выше примеремы можем сказать, что внутреннее свойство b
[[Prototype]]
указывает на a
.
Object.getPrototypeOf(b) === a; // true
Другими словами, b
наследуется от a
.
св том же примере мы могли бы использовать пустой конструктор, например:
function F(){}
F.prototype = a;
var b = new F(); // b again inherits from a (F.prototype)
Помните также, что свойство prototype
функций отличается от свойства [[Prototype]]
, которое есть у всех объектов, свойства prototype
функций используется при вызове с новым оператором, чтобы построитьновый объект, который наследуется от этого свойства.
Также имейте в виду, что в настоящее время внедряется стандарт ECMAScript 5, и эта прокладка не соответствует 100% спецификации, на самом деле, есть некоторыефункции стандартного Object.create
метода , которые нельзя эмулировать на ES3 .
См. Также: