2011-12-28 9 views
2

Javascriptオブジェクトの関数内で名前空間をスコープ内に保持する方法があるのだろうかと思っていました。Javascriptオブジェクトの関数の範囲内で名前空間を維持する

まず、いくつかのものを設定しましょう。名前空間FooBarにクラス(Javascriptが取得するクラスに近いクラス)があるとします。そして、グローバル名前空間(ウィンドウ)で、我々はのFooのインスタンスクラスのバーを、持っているので、...

FooBar.Foo = function() { 

} 

function Bar() { 
    this.init(); 
} 

Bar.prototype = { 
    init: function() { 
    this.foo = new FooBar.Foo(); 
    } 
} 

現在、私はスコープに物事をもたらすための2つのシステムがあります(「FooBarの」を使用して 1を)と未使用( "FooBar")これらの関数は、指定された名前空間の内容への参照をグローバル名前空間の内外に移動します 2.(namespace( "FooBar")){}これは、通常の動作を使用して、名前空間に含まれるすべての参照を含んでいます。 今は、すべての関数の中でこれらのメソッドの1つを使用して名前空間をスコープに入れなければなりません。私は、ええ、である、だから... ...クラスが宣言されたときにこれらを定義し、それらはまだいくつかの並べ替えの閉鎖に起因するだけで、このクラスのスコープ内に持つことの方法がありますかどうかを確認するために

FooBar.Foo = function() { 

} 

using("FooBar"); 

function Bar() { 
    this.init(); 
} 

Bar.prototype = { 
    init: function() { 
    this.foo = new Foo(); 
    } 
} 

unusing("FooBar"); 

をしようとしていますこのようなことも可能ですか、あるいは私は本当に頻繁にこれらをスコープの中に持ち込んでいませんか?

答えて

1

これはひどいです。私は、RequireJSのような最新のモジュールシステムを使用することをお勧めします。 My friend put together a nice presentation on the evolution and use of module systems in JavaScript。彼らは名前空間に対するJSの答えです。私がやっている、と私は必要なものを達成されていないもののために多くのオーバーヘッドだ

// FooBar.js 
define(function (require, exports, module) { 
    exports.Foo = function() { }; 
}); 

// Bar.js 
define(function (require, exports, module) { 
    // This is kind of like "using FooBar" in other languages. 
    var Foo = require("FooBar").Foo; 

    exports.Bar = function() { 
     this.init(); 
    }; 
    exports.Bar.prototype = { 
     init: function() { 
      this.foo = new Foo(); 
     } 
    }; 
}); 

// elsewhere.js 
define(function (require, exports, module) { 
    var Foo = require("FooBar").Foo; 
    var Bar = require("Bar").Bar; 

    console.log(new Foo()); 
    console.log(new Bar()); 
}); 
+0

あなたのコードは次のようになります。現在のシステムがあれば、それはまったく同じように実装できます。 – Ixonal

+0

他のJSプログラマーにあなたのコードを理解させることができるかどうかは、部分的に問題です。モジュールシステムは標準ですが、あなたが頭を悩ましていたことを驚かせるような何かを提案している間は、頭が狂っているのを驚かせます。 – Domenic

+0

+1 - この回答のオープニングは私を笑わせてくれました –

関連する問題