親から子オブジェクトに継承されたメソッドから変数へのアクセス可能性を調べています。JavaScriptからの変数アクセス継承メソッド
継承が子供のコンストラクタのプロトタイプに親のインスタンスを関連付ける実行されます。
Function.prototype.extend = function(child) {
var prototype = new this;
child.prototype = prototype;
return child;
};
は、だから私は、親クラスを定義します。
var Parent = function() {
var self = this;
this.init = function() {
self.name = 'Abram';
};
this.getName = function() {
alert('self.name = ' + self.name);
};
this.init();
};
と子クラス:
var Baby = Parent.extend(function(name) {
var self = this;
this.init = function() {
self.name = name;
};
this.init();
});
// instantiate a child object:
var baby = new Baby('Jimmy');
// call the inherited method:
baby.getName(); // undefined!
メソッドgetName
は正しく継承されますが、 self.name
メンバーにアクセスすることはできません。
子クラスインスタンスのスコープで利用できる場合はどうでしょう。
alert(baby.getName)
とメソッドの本体を確認する私が取得:私が期待まさにある
function() {
alert("self.name = " + self.name);
}
。
なぜローカルでself
変数が解決されないのですか?
ありがとうございました。私はすでにself.nameをthis.nameに変更しようとしましたが、それは動作します(そのレベルではまだクロージャではありません)。しかし、ローカルに名前が付けられたメンバーは、ネストされた関数スコープでそれらをマージするなど、効果的なコード再利用のために。 –
問題は、「親」関数での「自己」のバインディングが常に元のオブジェクトインスタンスになることです。それは閉鎖のためにそこに「ついた」。 – Pointy