用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 相关文章推荐
firefox下jquery iframe刷新页面提示会导致重复之前动作
Dec 17 Javascript
JS对象与json字符串格式转换实例
Oct 28 Javascript
javascript中scrollTop详解
Apr 13 Javascript
浅谈javascript中for in 和 for each in的区别
Apr 23 Javascript
Javascript 高阶函数使用介绍
Jun 15 Javascript
jQuery实现TAB风格的全国省份城市滑动切换效果代码
Aug 24 Javascript
ES6中class类用法实例浅析
Apr 06 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
Aug 24 Javascript
vue 优化CDN加速的方法示例
Sep 19 Javascript
vue项目中定义全局变量、函数的几种方法
Nov 08 Javascript
es6中Promise 对象基本功能与用法实例分析
Feb 23 Javascript
JS如何在数组指定位置插入元素
Mar 10 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
日本十大科幻动漫 宇宙骑士垫底,第一已成经典
2020/03/04 日漫
php-fpm配置详解
2014/02/12 PHP
php打造智能化的柱状图程序,用于报表等
2015/06/19 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
通过ifame指向的页面高度调整iframe的高度
2006/10/05 Javascript
javascript基础的动画教程,直观易懂
2007/01/10 Javascript
Javascript 验证上传图片大小[客户端]
2009/08/01 Javascript
jquery tools 系列 scrollable学习
2009/09/06 Javascript
Jquery中getJSON在asp.net中的使用说明
2011/03/10 Javascript
extjs ColumnChart设置不同的颜色实现代码
2013/05/17 Javascript
详解javascript中原始数据类型Null和Undefined
2015/12/17 Javascript
微信小程序实现签到功能
2018/10/31 Javascript
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
深入解析koa之异步回调处理
2019/06/17 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
[49:27]LGD vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
CentOS6.5设置Django开发环境
2016/10/13 Python
Python外星人入侵游戏编程完整版
2020/03/30 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
使用Python处理Excel表格的简单方法
2018/06/07 Python
python远程连接服务器MySQL数据库
2018/07/02 Python
PyQt5下拉式复选框QComboCheckBox的实例
2019/06/25 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
Python3 无重复字符的最长子串的实现
2019/10/08 Python
python pycharm的安装及其使用
2019/10/11 Python
python numpy 反转 reverse示例
2019/12/04 Python
Python 实现递归法解决迷宫问题的示例代码
2020/01/12 Python
Cotton On美国网站:澳洲时装连锁品牌
2016/10/25 全球购物
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
什么是servlet
2012/05/08 面试题
日化店促销方案
2014/03/26 职场文书
缓刑人员思想汇报
2014/10/11 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python
MySQL如何使备份得数据保持一致
2022/05/02 MySQL