これは多くの人が議論しているようです。しかし、残念ながら、私の問題に対する答えは見つかりませんでした。以下は、Javascript の継承に関するコードの一部です (本から)。
function Car() {
var self = this;
self.type = "Car"
self.go = function() {
console.log("Going...");
};
};
Toyota = function() { console.log("Original called"); };
Toyota.prototype = new Car();
Toyota.prototype.constructor = function() {
var self = this;
self.type = "Toyota";
self.go = function() {
console.log("A Toyota car is going...");
}
};
Toyota.prototype.isJapaneseCar = true;
function TestCar() {
console.log("Toyota.prototype.constructor: " + Toyota.prototype.constructor);
var t = new Toyota();
console.log("t.constructor: " + t.constructor);
console.log(t.type);
};
Firefox コンソールの出力:
Toyota.prototype.constructor: function () {
var self = this;
self.type = "Toyota";
self.go = function () {
console.log("A Toyota car is going...");
};
}
Original called
t.constructor: function () {
var self = this;
self.type = "Toyota";
self.go = function () {
console.log("A Toyota car is going...");
};
}
Car
出力から、 new Toyota()呼び出しが次のように示されます。
var t = new Toyota();
Toyota.prototype.constructor関数を期待どおりに呼び出さなかった代わりに、最初に定義された関数を呼び出します。
Toyota = function() { console.log("Original called"); };
賛成票数の多い投稿では、例とともにかなり詳細な説明がありました。「3.これが言及されるたびに、新しいオブジェクトを使用してコンストラクター関数を実行します。」言及された「コンストラクター」はprototype.constructorを参照していますか? 次の 3 行はどのように関連していますか。
- Toyota = function() { console.log("元の呼び出し"); }
- Toyota.prototype.constructor = function() { ...
- var t = 新しいトヨタ();
[編集] new Toyota()を呼び出したときにコンストラクター(Toyota.prototype.constructor) が呼び出されないのはなぜですか?