javascript
1function namespace(ns) { 2 let names = ns.split("."); 3 let parent = window; 4 5 for(let i = 0, len = names.length; i < len; i++) { 6 parent[names[i]] = parent[names[i]] || {}; 7 parent = parent[names[i]]; 8 } 9 return parent; 10} 11 12let my = namespace("Wings.Gihyo.Js.MyApp"); 13my.Person = function() {}; 14let p = new my.Person(); 15console.log(p instanceof Wings.Gihyo.Js.MyApp.Person); //true 16 17//console.log(parent);
このコードの挙動はイマイチ分からないところが多いです。
分からない点1
最後にconsole.log(parent); を実行してみたところ、ローカルスコープであるはずのparentが
正しくwindowオブジェクトの中身を出力していました。
そこで、このparentを違う名前(例えばaなど)に変えてみたところ、今度は
cannot find variable "a"
のようなエラーが出ました。なぜでしょうか。parentに特別な意味でもあるのでしょうか。
分からない点2
ある変数に違う値を代入したら、その値で書き換えられてしまうので、7行目でparentに
parent["Wings"]やparent["Gihyo"]を代入していったら、最終的にparent["MyApp"]がparentに入ってしまうと思います。ですが実際にparentには、Wings{ Gihyo:{ Js:{ MyApp: ... }}}のように、階層化した名前空間が代入されています。どういうことでしょうか。windowが代入されている場合だと話が変わってくるのでしょうか。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/18 17:28