JavaScript: создание объектов на основе прототипа без использования нового + конструктора

Это возможно?

Мое мышление: прототипы являются, по существу, атрибутами функции Constructor (будь то собственный конструктор, такой как Function, String или Object, или собственный собственный конструктор), и только ключевое слово "new" может использовать конструктор и его прототип для объекта создание

Я что-то пропустил?

Ответ 1

Вы правы, но теперь в 5-м выпуске ECMAScript метод Object.create способен создавать экземпляры объектов с использованием других объектов в качестве прототипа:

var proto = {foo: 1};
var obj = Object.create(proto);

В приведенном выше примере будет создан obj и он будет содержать ссылку на proto в внутреннем свойстве [[Prototype]] и:

obj.foo; // 1
obj.hasOwnProperty('foo'); // false

Этот метод получен из новой спецификации, утвержденной в декабре 2009 года, насколько я уже видел сейчас, на Mozilla JavaScript 1.9.3 реализация.

Теперь вы можете имитировать поведение этого метода, как это предложено Дуглас Крокфорд:

if (typeof Object.create !== 'function') {
  Object.create = function (o) {
    function F() {}
    F.prototype = o;
    return new F();
  };
}