// モジュールをインポートします
Module.importSymbols = function (from) {
if (typeof form == 'string') from = Module.modules[from];
var to = Module.globalNamespace; //デフォルト
var シンボル = [];
var firstsymbol = 1;
if (arguments.length>1 && 引数の種類[1] == 'オブジェクト' && 引数[1] != null) {
to = 引数[1];
最初のシンボル = 2;
}
for (var a=firstsymbol; a
symbols.push(arguments[a]);
}
if (symbols.length == 0) {
//デフォルトのエクスポートリスト
if (from.EXPORT) {
for (var i=0; ivar s = from.EXPORT[i];
to[s] = from[s];
}
戻る;
} else if (!from.EXPORT_OK) {
// EXPORT 配列 && EXPORT_OK 配列両方とも未定義
for (var s in from) {
to[s] = from[s];
戻る;
}
}
}
if (symbols.length > 0) {
var allowed;
if (from.EXPORT || form.EXPORT_OK) {
allowed = {};
if (from.EXPORT) {
for (var i=0; iallowed[from.EXPORT[i]] = true;
}
}
if (from.EXPORT_OK) {
for (var i=0; iallowed[form.EXPORT_OK[i] ] = true;
}
}
}
}
// シンボル
をインポートします (var i=0; ivar s = シンボル[私];
if (!(s in from)) throw new Error('シンボル ' s ' が定義されていません');
if (!!allowed && !(s in allowed)) throw new Error(s ' はパブリックではないため、インポートできません');
to[s] = form[s];
}
}
本来の名前定義は mename 空間の下にあるメソッド define() は、Hongruname 空間の下に挿入されます。 もちろん、ここでの入出力はコピーのみであり、mename 空間では define() を使用することができます。
よろしくお願いします。このデモは管理名空間の完全な方法を提供するだけであり、より優れた方法があることを認めています。以下の YUI、EXT などのフレームを参照してください。または、《JavaScript 权威指南》を参照してください。
モジュールと名前空間です。
/* == モジュールと名前空間ツール機能 ==
* 著者 : hongru.chen
* 日付 : 2010-12-05
*/
var モジュール;
//モジュールをチェック --> 'Module' が存在しないことを確認してください
if (!!Module && (typeof Module != 'object' || Module.NAME)) throw new Error("NameSpace 'Module' selected!");
モジュール = {};
モジュール.NAME = 'モジュール';
モジュール.バージョン = 0.1;
Module.EXPORT = ['require',
'importSymbols'];
Module.EXPORT_OK = ['createNamespace',
'isDefined',
'モジュール',
'globalNamespace'];
Module.globalNamespace = this;
Module.modules = {'モジュール': モジュール};
// 名前空間を作成 -->最上位の名前空間を返します
Module.createNamespace = function (name, version) {
if (!name) throw new Error('name required');
if (name.charAt(0) == '.' || name.charAt(name.length-1) == '.' || name.indexOf('..') != -1) throw new Error('不正な名前');
var Parts = name.split('.');
var コンテナ = Module.globalNamespace;
for (var i=0; i
var part = Parts[i];
if (!コンテナ[パーツ]) コンテナ[パーツ] = {};
コンテナ = コンテナ[パーツ];
}
var 名前空間 = コンテナ;
if (namespace.NAME) throw new Error('モジュール "' name '" は既に定義されています');
namespace.NAME = 名前;
if (バージョン) namespace.VERSION = バージョン;
Module.modules[name] = 名前空間;
名前空間を返します。
};
// 名前が定義されているかどうかを確認します
Module.isDefined = function (name) {
Module.modules の名前を返します;
};
// バージョンを確認します
Module.require = function (name, version) {
if (!(Module.modules の名前)) throw new Error('モジュール ' 名前 ' が定義されていません');
if (!version) return;
var n = Module.modules[名前];
if (!n.VERSION || n.VERSION < version) throw new Error('version ' version ' 以上が必要です');
};
// モジュールをインポートします
Module.importSymbols = function (from) {
if (typeof form == 'string') from = Module.modules[from];
var to = Module.globalNamespace; //デフォルト
var シンボル = [];
var firstsymbol = 1;
if (arguments.length>1 && 引数の種類[1] == 'オブジェクト' && 引数[1] != null) {
to = 引数[1];
最初のシンボル = 2;
}
for (var a=firstsymbol; asymbols.push(arguments[a]);
}
if (symbols.length == 0) {
//デフォルトのエクスポートリスト
if (from.EXPORT) {
for (var i=0; ivar s = from.EXPORT[i];
to[s] = from[s];
}
戻る;
} else if (!from.EXPORT_OK) {
// EXPORT 配列 && EXPORT_OK 配列両方とも未定義
for (var s in from) {
to[s] = from[s];
戻る;
}
}
}
if (symbols.length > 0) {
var allowed;
if (from.EXPORT || form.EXPORT_OK) {
allowed = {};
if (from.EXPORT) {
for (var i=0; iallowed[from.EXPORT[i]] = true;
}
}
if (from.EXPORT_OK) {
for (var i=0; iallowed[form.EXPORT_OK[i] ] = true;
}
}
}
}
// シンボル
をインポートします (var i=0; ivar s = シンボル[私];
if (!(s in from)) throw new Error('シンボル ' s ' が定義されていません');
if (!!allowed && !(s in allowed)) throw new Error(s ' はパブリックではないため、インポートできません');
to[s] = form[s];
}
}