Пытаясь согнуть головой вокруг Javascript, возьмите OO... и, как и многие другие, запутались в свойстве constructor
. В частности, значение свойства constructor
, поскольку я не могу показать, что оно имеет какой-либо эффект. Например:.
function Foo(age) {
this.age = age;
}
function Bar() {
this.name = "baz";
}
Bar.prototype = new Foo(42);
var b = new Bar;
alert(b.constructor); // "Foo". That OK because we inherit `Foo` prototype.
alert(b.name); // "baz". Shows that Bar() was called as constructor.
alert(b.age); // "42", inherited from `Foo`.
В приведенном выше примере объект b
, похоже, имеет правый конструктор, называемый (Bar
) – и он наследует свойство age от Foo
. Так почему многие люди предлагают это как необходимый шаг:
Bar.prototype.constructor = Bar;
Ясно, что при построении b
был вызван конструктор Bar
справа, так какое влияние имеет свойство этого прототипа? Мне любопытно узнать, какая практическая разница на самом деле делает свойство конструктора "правильным", поскольку я не вижу, чтобы это имело какое-либо влияние на конструкцию, которая фактически вызывается после создания объекта.