用apply让javascript函数仅执行一次的代码
用apply让javascript函数仅执行一次的代码
发布时间:2016-12-30 来源:查字典编辑
摘要:复制代码代码如下:varobj=newObject();obj.triggerOnce=function(fn){//控制让函数只触发一次r...

复制代码 代码如下:

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.nn";

txt += "Error message: " + e.message + "nn";

txt += "Error name: " + e.name + "nn";

//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 urlStrs = location.search; //QueryString

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。

作者:Jeff Wong

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类