Разве это не зависит от того, как вы на самом деле реализуете наследование в вашей системе?
Например, в версии JavaScript, которую вы описываете, prototype
для AwesomeDragonImmuneToFire
обычно будет экземпляром из AwesomeDragon
, и так как вы всегда будете работать с экземплярами , не имеет значения, что вы делаете с каким-то конкретным AwesomeDragon
:
function Dragon()
{
this.position = "starting point";
}
function AwesomeDragon()
{
this.awesome = true;
}
AwesomeDragon.prototype = new Dragon();
function AwesomeDragonImmuneToFire()
{
this.immuneToFire = true;
}
AwesomeDragonImmuneToFire.prototype = new AwesomeDragon();
>>> var awesome = new AwesomeDragon();
>>> var immune = new AwesomeDragonImmuneToFire();
>>> awesome.position = "flying above village";
>>> immune.position;
"starting point"
>>> immune.awesome
true
В этом примере нет классов, и все экземпляры являются просто экземплярами Object
, которые знают, какая функция использовалась для их создания. new
- это всего лишь немного синтаксического сахара , а использование StudlyCaps для функций конструктора - это просто соглашение для функций, которые предназначены для использования с new
.
Ключевым моментом является то, что каждый объект имеет цепочку объектов-прототипов, которая проверяется, если вы пытаетесь получить доступ к атрибуту, который сам объект не содержит, согласно описанию Йегге о том, что такое «Шаблон свойств».
https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Details_of_the_Object_Model