NetEase や Sina などの Web サイトでこれに似たものが使われているのを見て、当時の私の JS レベルはほんの一滴にすぎず、その場で衝撃を受けました。
でも今回は、今後見たときに混乱しないように自分なりに分析してみようと思います。
//呼び出し例: bradio.namespace( "brADIO. lang.array");
//以下はBaiduでコンパイルしたソースコードです。変数は全てa,b,c,d...仕様点は後ほど書き直します。
//さて、分析を始めましょう
bradio.namespace = function () { //ネームスペースを作成します
var a = argument, //["brADIo.lang.array"]
b = null, //上位レベルのオブジェクトを格納するために使用されます
c, d, e, f; //c はカウンター、d は内部ループのカウンター、e は分割名前空間配列、f は引数 パラメーター 長さ
c = 0;
for (f = a.length; c e = ("" a[c]).split("."); //Split 分割後、名前空間を分割します ["brADIO", "lang", "array"]
b = bradio; //基本オブジェクト、このオブジェクトに基づいて名前空間を追加します
for (d = "brADIO" = = e[0] ? 1 : 0; d < e.length d ) //最初のものが bradio の場合、["bradio","lang","array"]
b[ d]] = b[e[d]] || b = b[e[d]]
b = b[e[d]] {} // 現在のオブジェクトが操作されている場合現在のオブジェクトを使用します。存在しない場合は、空のオブジェクトを割り当てます。
//b = b[e[d]] //単語オブジェクト b でカバーします。 object
}
return b//オブジェクトの最後のレイヤーを返します
};
以下のように整理されており、バージョンを理解していることがわかります
//bradio.namespace("brADIo.lang.array");
bradio.namespace = function () { //名前空間を作成します
var args = argument,
parent = null,
arr, i, j, len;
for (i=0, len) = args.length; arr = ("" args[i]).split(".");
親 = bradio;
for(j = " "== arr [0]?1:0; j&lt; arr.length; j){
parent [arr [j]] = parent [arr [j]] || {};
は完全に正しくありません。皆さんを誤解させないように、指摘を手伝ってください。