用apply让javascript函数仅执行一次的代码


Posted in Javascript onJune 27, 2010
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 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 相关文章推荐
js 替换
Feb 19 Javascript
很可爱的输入框
Aug 03 Javascript
深入探讨前端框架react
Dec 09 Javascript
jquery Deferred 快速解决异步回调的问题
Apr 05 Javascript
jQuery插件实现文件上传功能(支持拖拽)
Aug 27 Javascript
js的各种排序算法实现(总结)
Jul 23 Javascript
jQuery基于BootStrap样式实现无限极地区联动
Aug 26 Javascript
ES6中module模块化开发实例浅析
Apr 06 Javascript
浅谈对Angular中的生命周期钩子的理解
Jul 31 Javascript
基于zepto.js实现登录界面
Oct 09 Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
May 31 Javascript
一文了解vue-router之hash模式和history模式
May 31 Javascript
验证javascript中Object和Function的关系的三段简单代码
Jun 27 #Javascript
jQuery选择头像并实时显示的代码
Jun 27 #Javascript
Javascript匿名函数的一种应用 代码封装
Jun 27 #Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
Jun 25 #Javascript
让IE6支持min-width和max-width的方法
Jun 25 #Javascript
jQuery与其它库冲突的解决方法
Jun 25 #Javascript
jQuery.Validate 使用笔记(jQuery Validation范例 )
Jun 25 #Javascript
You might like
CodeIgniter中实现泛域名解析
2014/07/19 PHP
php实现无限级分类
2014/12/24 PHP
WampServer搭建php环境时遇到的问题汇总
2015/07/23 PHP
php array_values 返回数组的值实例详解
2016/11/17 PHP
PHP7修改的函数
2021/03/09 PHP
js传值 判断
2006/10/26 Javascript
一实用的实现table排序的Javascript类库
2007/09/12 Javascript
解javascript 混淆加密收藏
2009/01/16 Javascript
IE中createElement需要注意的一个问题
2010/07/13 Javascript
$.format,jquery.format 使用说明
2011/07/13 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
推荐一款jQuery插件模板
2015/01/09 Javascript
JQuery操作元素的css样式
2015/03/09 Javascript
多个js毫秒倒计时同时进行效果
2016/01/05 Javascript
jquery自定义插件——window的实现【示例代码】
2016/05/06 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
详解vue移动端日期选择组件
2018/02/22 Javascript
vue实现底部菜单功能
2018/07/24 Javascript
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
谈谈node.js中的模块系统
2020/09/01 Javascript
JavaScript前后端JSON使用方法教程
2020/11/23 Javascript
Python学习笔记之os模块使用总结
2014/11/03 Python
python strip() 函数和 split() 函数的详解及实例
2017/02/03 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
python使用pygame框架实现推箱子游戏
2018/11/20 Python
python事件驱动event实现详解
2018/11/21 Python
Matplotlib使用字符串代替变量绘制散点图的方法
2020/02/17 Python
python 实现单例模式的5种方法
2020/09/23 Python
python实现三壶谜题的示例详解
2020/11/02 Python
老师给学生的表扬信
2014/01/17 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
房地产销售助理岗位职责
2015/04/14 职场文书
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技