JavaScriptコンストラクターを理解しようとして、私はこの質問を見てきました。
私にはそれを合理的に理解しているように見えましたが、皮肉なことに、同様のコードを実行しようとすると、まったく機能しませんでした。
これは私のコードです
function Car(name) {
this.Name = name;
this.Year = 1999;
}
Car.prototype.Drive = function() {
document.write("My name is '" + this.Name + "' and my year is '" + this.Year + "'. <br />");
};
SuperCar = function () { };
SuperCar.prototype = new Car();
function SuperCar(name) {
Car.call(this, name);
}
var MyCar = new Car("mycar");
var MySuperCar = new SuperCar("my super car");
MyCar.Drive();
MySuperCar.Drive();
まずはこのライン
SuperCar = function () { };
それがまったく実行されるために必要でした。省略した場合、この行に「SuperCar is undefined」というエラーが表示されます。
SuperCar.prototype = new Car();
SuperCar を空の関数として宣言する必要がある理由がよくわかりません。
次に、コードを実行すると、この結果が得られます
My name is 'mycar' and my year is '1999'.
My name is 'undefined' and my year is '1999'.
どうやら、MySuperCar の場合、SuperCar(name) 関数は呼び出されませんが、Car() は呼び出されます。
この行を追加しても役に立ちません
SuperCar.prototype.constructor = SuperCar;
これもそうではない
SuperCar.prototype.constructor = function(name) {
Car.call(this, name);
};
(IE 9 と Chrome 22 のスクリプトタグ内でコードを実行しています)
name パラメーターを取る SuperCar コンストラクターを適切に定義するにはどうすればよいですか? または、別の言い方をすれば、新しい SuperCar("my super car") 呼び出しを期待どおりに動作させるにはどうすればよいでしょうか (名前を "my super car" に設定します)。