どうしても名前空間を汚染したい時のjquery拡張

jsonpとかフラッシュから関数呼びたい時とかグローバルな名前空間汚したい時ってありますよね?
他と名前ぶつからないようにするの大変ですよね?
(注意:jquery.ajaxjsonp呼び出す時は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 : {}, //名前空間にセットするオブジェクト(省略可能)
});