「名前空間」オプションを作るの背後にある基本的な考え方は、window
対象であるグローバルスコープに機能を割り当てることです:
window.somefunction = Library.One.somefunction;
あなたが他の言語に似た働きinclude
関数を書くことができます。必要に応じて
var include = function (library, p) {
if (!p) {
for (var prop in library) {
if (library.hasOwnProperty(prop)) {
window[prop] = library[prop];
}
}
} else {
window[p] = library[p];
}
};
がそれからちょうど、実行します。
include(Library.One);
の
または使用の特定の機能のみ:
include(Library.One, 'somefunction');
警告:ドット表記(One.somefunction
)なしで機能を実行
はthis
キーワードがwindow
なくLibrary.One
を参照します。 this
をまったく使用しないと、問題はありません。あなたが関数の間に共有するデータを持っているなら、あなたはthis
の代わりにクロージャのスコープを使用して行うことができます。
var Library = {};
(function() {
// I'm a closure, I have local scope
var sharedData = "I'm shared but private to this scope";
Library.One = {};
Library.One.funcOne = function() {
alert(sharedData);
};
Library.One.funcTwo = function() {
sharedData += "!";
};
})();
他の人があなたの方法をグローバルにするためにではない、よくアドバイスがあります。これは、いったんグローバルになると、すべてのファイルにとってグローバルであり、したがって他のコードと競合する可能性があるからです。あなたができることは、上記のimport
関数を変更して新しいオブジェクトを作成し、そのオブジェクトにすべてを代入してから返すことです。そして、特定のライブラリへのショートカットを行うことができます必要なファイル:
(function() {
var _ = include(Library.One); // This stays within this scope
_.somefunction();
})();
のみのブラウザでは、名前 'window'を提供しています。代わりに 'global'を使用してください。 – erjiang
@erjiang、ありがとう、node.jsというタグが付いていたのを忘れてしまった。それがノードであることを見ると、モジュールシステムのせいでほとんどのものは無関係です。 –
'import'は予約語です。http://www.crockford.com/javascript/survey.html – galambalazs