JavaScriptの継承で見つかったサンプルを実装しようとしていますが、子オブジェクトが期待どおりに構築されていないようです。次の例では、jillインスタンスを作成してもJillオブジェクトは返されず、子または親のメソッドを呼び出すことはできません。JavaScriptコンストラクタは実行されていませんか?
あなたが誤ってオブジェクトを開始しているvar Person = function() {
this.name = "unnamed";
}
Person.prototype.sayName = function() {
console.log("My name is " + this.name);
}
var Jill = function() {
var jill = function() {
Person.call(this);
this.name = "Jill";
};
jill.prototype = Object.create(Person.prototype);
jill.prototype.constructor = jill;
jill.prototype.expressJoy = function() {
console.log("Huray!");
};
return jill;
}
var jill = new Jill();
console.log(jill instanceof Jill); // false
jill.expressJoy(); // error, is not a function
jill.sayName(); // error, seen if comment out previous line
'jill'は実際のコンストラクタです。なぜあなたは 'Jill'関数でそれをラップしたのか分かりません。これはIIFEであるはずだったのでしょうか? – Bergi
うん、@Bergi - あなたが正しい考えを持っていたように見える。 – scader