jsでjavaのpackageのようにアクセスする
DWRのような要は
hoge.foo.bar('test');
みたいな呼び方を簡単にする方法はないものかという話なんだけど。
こんなの書いてみた。
var _global = (function (){return this;})(); /* .... 適当な名前なので任意で..... */ var $ = { global : _global, /* .........*/ isUndef : function(name, obj){ return (typeof obj[name] == "undefined"); }, _createObj : function(name, obj){ return (obj && !$.isUndef(name, obj) ? obj[name] : (obj[name] = {_name : (obj._name) ? obj._name+'.'+name : name})); }, _createFunction : function(name, obj, func){ func_name = name; return (obj && !$.isUndef(name, obj) ? obj[name] : (obj[name] = func)); }, _createObjects : function(names, context, func){ if(!context){ return undefined; } if(typeof(names) == 'string'){ names = $.toArray(names.split('.')); $._createObjects(names, context, func); }else{ var name = names.shift(); if(name){ if(name.length == 0 && func){ $._createFunction(names, context, func); }else{ context = $._createObj(name, context); if(context){ $._createObjects(names, context, func); } } } } }, create : function(path, func){ if(path.indexOf('.') == -1){ return $._createObj(path, _global); } return $._createObjects(path, _global, func); }, }
$.create('hoge.foo.bar'); //Object alert(hoge.foo.bar); var test = fuction(){alert('test');}; $.create('hoge.foo.hoge', test);
イメージはこんな感じ。
で更に
Function.prototype.instance = function(name){ $.create(name, this); }
ここまでくると
var f = function(){ /* .... ajaxなこと... */ } f.instance('foo.bar'); //fが呼ばれる foo.bar();
となる。
これはどーいったときに使うかなんだけどserver側のモジュール名でそのまま呼べますよ的な使い方をしたいときに使うわけ。
主にAjax用なんだけどね。
まああんまし流行らないかな、この呼び方は。
うくく。