當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
巧用apply让javascript函数仅执行一次
生活随笔
收集整理的這篇文章主要介紹了
巧用apply让javascript函数仅执行一次
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
RT,有時候我們只想要讓某些腳步函數執行一次就算完成任務了。如何實現這種功能呢?簡單模仿下面這段就可以輕松搞定了:
代碼 var?obj?=?new?Object();obj.triggerOnce?=?function(fn)?{?//控制讓函數只觸發一次
????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;
????????}
????}
}
調用形式:
function?showMsg(arg){
???alert(arg);
}
var?fn=obj.triggerOnce(showMsg);
fn(1);//只執行一次
fn(2);//沒有調用fn
?最后,關于javascript的apply方法,您可以簡單參考這篇舊文。
?
【外一篇】用javascript取得querystring的值
在常見的網站中,經常碰到有“XXXX.aspx?username=jeffwong&address=北京” 這種形式的url,通過asp.net的Request對象獲取鍵值輕而易舉,通過js也不是很難,用下面的函數就可以搞定了:
var?Request?=?{};
Request.Count?=?0;
Request.Add?=?function(name,?value)?{
????if?(Request.hasOwnProperty(name)?==?false)?{
????????Request.Count++;?//如果不存在,計數添加1
????}
????Request[name]?=?value;
????return?true;
}
Request.QueryString?=?function(name)?{//取對應的鍵值
????var?key?=?name.toString().toLocaleLowerCase();?//不區分大小寫
????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);?//添加
????????}
????}
}
測試函數如下:
代碼 //測試函數
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里的參數通常都會有編碼,本文采用的是比較常用的unescape進行解碼,實際上,關于url參數編碼,通常有escape,encodeURIComponent和encodeURI這三種編碼函數,escape是window對象的內置函數,而另外兩種則是javascript內置函數,它們解碼的函數也是一一對應的關系(您可以參考這一篇),各自對應的反轉函數分別是unescape,decodeURIComponent和decodeURI。
轉載于:https://www.cnblogs.com/jeffwongishandsome/archive/2010/06/15/1671585.html
總結
以上是生活随笔為你收集整理的巧用apply让javascript函数仅执行一次的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XML 测验
- 下一篇: 关于javascript作用域