2
は原型継承のこのコードを参照してください。原型継承:いいえ違いコンストラクタassingmentを省略
var Person = function() {
this.canTalk = true;
};
Person.prototype.greet = function() {
if (this.canTalk) {
console.log('Hi, I am ' + this.name);
}
};
var Employee = function(name, title) {
Person.call(this);
this.name = name;
this.title = title;
};
Employee.prototype = Object.create(Person.prototype);
// Note: there's no difference, when I comment out the following line
Employee.prototype.constructor = Employee;
Employee.prototype.greet = function() {
if (this.canTalk) {
console.log('Hi, I am ' + this.name + ', the ' + this.title);
}
};
var bob = new Employee('Bob', 'Builder');
bob.greet();
私は行をコメントアウトしても同じ結果(コンソール出力)を得るか
Employee.prototype.constructor = Employee;
次に、関数プロトタイプコンストラクタを関数自体に等しくする価値はありますか?私はJSの初心者です。それは長期的にも効果がある場合。 どのように?私は回避策を望んでいません。
'(新しい関数Foo(){})コンストラクタ。 // function Foo(){} ' –
[なぜプロトタイプのコンストラクタを設定する必要がありますか?]の複製がありますか?(http://stackoverflow.com/questions/8453887/why-is-it-necessary-to-set- the-prototype-constructor) –
デフォルトのプロトタイプをオーバーライドすると、コンストラクタなどに関するデータが失われます。 bar(){}; '' Bar.prototype = Object.create({}); //関数Object(){[native code]} '、すなわち' Bar'ではない –