プロトタイプをオーバーライドしているため、これは機能しません。を呼び出すとnew Outer
、現在のthis
から継承されます。その後、関数内でオーバーライドしていますが、現在作成されているインスタンスには影響せず、将来のインスタンスにのみ影響します。既存のプロトタイプ
を拡張する必要があります。 Outer.prototype
Object.prototype
ただし、特定の関数を非表示にする場合は、自己呼び出し関数を使用します。
var Outer = (function() {
function Extensions() {
}
Extensions.protoype.Greet = function () {
alert(this.Greetings);
}
function Inner() {
Extensions.call(this);
this.Greetings = "Take me to your leader.";
}
Inner.prototype = Object.create(Extensions.prototype);
Inner.prototype.constructor = Inner;
function Outer() {
Extensions.call(this);
this.Greetings = "Greetings!";
}
Outer.prototype = Object.create(Extensions.prototype);
Outer.prototype.constructor = Outer;
Outer.prototype.getInner = function() {
return new Inner();
};
return Outer;
}());
ここで、Extensions
は即時実行関数内で定義されます。そのため、外部からはアクセスできません。その関数から返すOuter
ので、アクセスできます。
JavaScriptで正しく行われた継承の非常に良い説明については、この回答を参照してください。