0

名前空間(スコープ)内でオブジェクト変数を継承するにはどうすればよいですか?

var f2 = {
   a: 'test'
}

f2.history = {

  load: function(){ alert(this.a); }

}

// Turns out Undefined
f2.history.load();
4

2 に答える 2

1

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);

この最後の構成の利点は、異なるファイルでサブモジュールを簡単に宣言できることです。

于 2013-03-21T10:53:30.920 に答える
1

ではなく、名前空間 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();
于 2013-03-21T10:54:48.410 に答える