どうしても名前空間を汚染したい時のjquery拡張
jsonpとかフラッシュから関数呼びたい時とかグローバルな名前空間汚したい時ってありますよね?
他と名前ぶつからないようにするの大変ですよね?
(注意:jquery.ajaxでjsonp呼び出す時はjqueryが内部で同じような事をしています)
作り方
jquery.makeNS.jsとか適当に名前をつけて保存します。
/* (C) makoto@2ch.to */ if(typeof jQuery === 'function' && typeof jQuery.makeNS === 'undefined' ) jQuery.makeNS = function($_){ var $ = jQuery; var $default = { top : window, prefix : 'jQuery_', object : {} }; $_ = $.extend($default,typeof $_ === 'function' ? {object:$_} : $_); var $c = $.now(); var $ns = null; while( typeof $_['top'][ $ns = $_['prefix'] + $c ] !== 'undefined' ) $c++; $_['top'][$ns] = $_['object']; return $ns; };
準備
〜の中でjQueryと先ほど作ったjquery.makeNS.jsをロードします。<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.min.js"></script> <script type="text/javascript" src="./jquery.makeNS.js"></script>
使い方
//window[$ns]に空のオブジェクトがセットされます。 var $ns = $.makeNS(); //window[$ns]に関数がセットされます。 var $ns = $.makeNS(function($_){console.log($_)}); //引数topで渡したオブジェクトの$nsに引数object(関数でも定数でも良い)で渡したオブジェクトがセットされます。 var $ns = $.makeNS({ top : window, //TOPのオブジェクト(省略可能) prefix : 'jQuery_', //名前空間の先頭文字(省略可能) object : {}, //名前空間にセットするオブジェクト(省略可能) });