javascript
巧用apply让javascript函数仅执行一次
RT,有時候我們只想要讓某些腳步函數(shù)執(zhí)行一次就算完成任務了。如何實現(xiàn)這種功能呢?簡單模仿下面這段就可以輕松搞定了:
代碼 var?obj?=?new?Object();obj.triggerOnce?=?function(fn)?{?//控制讓函數(shù)只觸發(fā)一次
????return?function()?{
????????try?{
????????????fn.apply(this,?arguments);
????????}
????????catch?(e)?{
????????????var?txt?=?"There?was?an?error?on?this?page.\n\n";
????????????txt?+=?"Error?message:?"?+?e.message?+?"\n\n";
????????????txt?+=?"Error?name:?"?+?e.name?+?"\n\n";
????????????//alert(txt);//正式平臺上可能需要注釋掉該行
????????}
????????finally?{
????????????fn?=?null;
????????}
????}
}
調(diào)用形式:
function?showMsg(arg){
???alert(arg);
}
var?fn=obj.triggerOnce(showMsg);
fn(1);//只執(zhí)行一次
fn(2);//沒有調(diào)用fn
?最后,關(guān)于javascript的apply方法,您可以簡單參考這篇舊文。
?
【外一篇】用javascript取得querystring的值
在常見的網(wǎng)站中,經(jīng)常碰到有“XXXX.aspx?username=jeffwong&address=北京” 這種形式的url,通過asp.net的Request對象獲取鍵值輕而易舉,通過js也不是很難,用下面的函數(shù)就可以搞定了:
var?Request?=?{};
Request.Count?=?0;
Request.Add?=?function(name,?value)?{
????if?(Request.hasOwnProperty(name)?==?false)?{
????????Request.Count++;?//如果不存在,計數(shù)添加1
????}
????Request[name]?=?value;
????return?true;
}
Request.QueryString?=?function(name)?{//取對應的鍵值
????var?key?=?name.toString().toLocaleLowerCase();?//不區(qū)分大小寫
????var?result?=?null;
????try?{
????????//?if?(Request.hasOwnProperty(key))?{
????????result?=?Request[key];
????????//?}
????}
????catch?(e)?{
????????//alert(e.message);
????}
????return?result;
}
Request.Init?=?function(urlQueryString)?{
????if?(urlQueryString.indexOf("?")?!=?-1)?{
????????var?url?=?urlQueryString.substr(1)
????????var?strArr?=?url.split("&");
????????for?(var?i?=?0;?i?<?strArr.length;?i++)?{
????????????var?strChildArr?=?strArr[i].split("=");
????????????var?name?=?String(strChildArr[0]).toLowerCase();
????????????var?value?=?unescape(strChildArr[1]);?//unescape解碼
????????????this.Add(name,?value);?//添加
????????}
????}
}
測試函數(shù)如下:
代碼 //測試函數(shù)
function?test()?{
????Request.Init(urlStrs);?//初始化request
????alert(Request.Count);
????var?name?=?"username";
????var?value?=?Request.QueryString(name);
????alert(Request[name]);
????alert(Request.QueryString(name));
????name?=?"address"
????alert(Request[name]);
????alert(Request.QueryString(name));
????name?=?"age";
????alert(Request[name]);
????alert(Request.QueryString(name));
}
需要說明的是,url里的參數(shù)通常都會有編碼,本文采用的是比較常用的unescape進行解碼,實際上,關(guān)于url參數(shù)編碼,通常有escape,encodeURIComponent和encodeURI這三種編碼函數(shù),escape是window對象的內(nèi)置函數(shù),而另外兩種則是javascript內(nèi)置函數(shù),它們解碼的函數(shù)也是一一對應的關(guān)系(您可以參考這一篇),各自對應的反轉(zhuǎn)函數(shù)分別是unescape,decodeURIComponent和decodeURI。
轉(zhuǎn)載于:https://www.cnblogs.com/jeffwongishandsome/archive/2010/06/15/1671585.html
總結(jié)
以上是生活随笔為你收集整理的巧用apply让javascript函数仅执行一次的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XML 测验
- 下一篇: 在.net3.5中使用ListView控