Старый объект как прототип

Я читаю эту книгу, и там есть глава о прототипах с этим трудным для понимания абзацем и фрагмент кода.

Когда вы создаете новый объект, вы можете выбрать объект, который должен быть его прототипом. Механизм, предоставляемый JavaScript для этого, запутан и сложен, но его можно значительно упростить. Мы добавим метод beget к функции Object. Метод beget создает новый объект, который использует старый объект в качестве своего прототипа.

if (typeof Object.beget !== 'function') {
     Object.beget = function (o) {
         var F = function () {};
         F.prototype = o;
         return new F();
     };
}
var another_stooge = Object.beget(stooge);

Не могли бы вы объяснить этот код, почему это хорошо и т. д.? Какой ресурс вы бы порекомендовали для изучения прототипов? Вот это довольно сложно.


person xralf    schedule 09.09.2011    source источник
comment
Ознакомьтесь с этим ответом SO, в котором подробно объясняется прототипное наследование javascript 1598077" title="как правильно создать пользовательский объект в javascript"> stackoverflow.com/questions/1595611/   -  person Narendra Yadala    schedule 09.09.2011
comment
Хорошие части @xralf javascript трудно понять. Я также разделяю то же чувство.   -  person sushil bharwani    schedule 09.09.2011


Ответы (2)


Если вы сделаете:

Object.beget(oldObject);

Старый объект — это о, переданный функции. Следующим шагом является создание нового объекта. Это происходит с:

var F = function(){};

Это создает новую функцию F, написанную с заглавной буквы просто для того, чтобы показать, что это класс, который следует вызывать с помощью new. Затем старый объект устанавливается как прототип этого класса, и возвращается новый экземпляр F.

F.prototype = o;
return new F();

Вы должны понимать, что в JavaScript (без классов) объекты — это просто экземпляры функций.

person douwe    schedule 09.09.2011
comment
Я думаю, вы имеете в виду o вместо 0. - person pimvdb; 09.09.2011
comment
объекты — это просто экземпляры функций... это неправда. Когда вы вызываете new Func(), то this внутри функции ссылается на пустой объект, который наследуется от Func.prototype. Это все. Или, может быть, вы просто имеете в виду что-то другое, чем я понимаю :) - person Felix Kling; 09.09.2011

Я всегда находил документ MDN по JavaScript поучительным, для меня этот хорошо описывает прототип: https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Details_of_the_Object_Model

person Py.    schedule 09.09.2011
comment
Спасибо, буду читать. Я видел это около недели назад, но сайт был поврежден или что-то в этом роде, поэтому я избегал этого, но теперь он читаем. - person xralf; 09.09.2011