名前空間(スコープ)内でオブジェクト変数を継承するにはどうすればよいですか?
var f2 = {
a: 'test'
}
f2.history = {
load: function(){ alert(this.a); }
}
// Turns out Undefined
f2.history.load();
名前空間(スコープ)内でオブジェクト変数を継承するにはどうすればよいですか?
var f2 = {
a: 'test'
}
f2.history = {
load: function(){ alert(this.a); }
}
// Turns out Undefined
f2.history.load();
f2.history
と の間にリンクはありませんf2
。より一般的には、プロパティ値とその所有者の間にリンクはありません。
次のように呼び出すことができます。
f2.history.load.call(f2);
または、オブジェクトを factory で宣言することもできます:
var f2 = (function(){
var self = {
a: 'test'
};
self.history = {
load: function(){ alert(self.a); }
};
return self;
})();
これにより、
f2.history.load();
別のバリアントでは、サブモジュールをより分離した方法で定義できます。
var f2 = {
a: 'test'
};
(function(f){
f.history = {
load: function(){ alert(f.a); }
}
})(f2);
この最後の構成の利点は、異なるファイルでサブモジュールを簡単に宣言できることです。
ではなく、名前空間 f2 を使用しますthis
。
load: function(){ alert(f2.a); }
作品
var f2 = {
a : 'test',
init: function(a) {
if (a) this.a = a; //set a, if a is defined
},
};
function history(a) {
function F() {};
F.prototype = f2;
var f = new F();
f.init(a);
load = function() {
alert(f.a);
}
return this;
}
var h1 = history();
h1.load(); //alerts "test"
var h2 = history('history');
h2.load(); //alerts "history"
//but now h1 also holds history
h1.load();