犀利的js 函数集合


Posted in Javascript onJune 11, 2009

那么分享几个理想状态的js原型函数。大部分整理修改自月影的blog
另外推荐一下月影的书——"王者归来",如果你每周js的coding时间大于5小时,还是值得一读的。
1.函数胶水,有很多同学用jq用习惯了,有时就为一个类似于c#里的event+=delegate而用jq,似乎有点划不来,这几原型函数就够了。

Function.prototype.$concat = function(){ 
var funcs = [this].concat(Array.apply([], arguments)); 
return function(){ 
var ret = []; 
for(var i = 0; i < funcs.length; i++){ 
var func = funcs[i] instanceof Function ? funcs[i] : new Function(funcs[i]); 
ret.push(func.apply(this, arguments)); 
} 
return ret; 
} 
} 
//var concat = (function a(a){ 
// alert("a:"+a); 
//}).$concat(function b(b){ 
// alert("b:"+b); 
//}); 
//concat(1);

2.函数柯灵化,柯灵化是面向函数式语言的一个重要特性,和大部分人所持有的面向过程的编程思想区别很大,就我愚见,日常工作中,函数柯灵化除了能把一些代码写得优雅(或许还有诡异)以外,不是特别的"必要"。
Function.prototype.$curry=function(){ 
with({that:this}) 
return function() 
{ 
var args = Array.prototype.slice.call(arguments); 
if(args.length<that.length) 
{ 
return function(){ 
var _args = args.concat(Array.prototype.slice.call(arguments)); 
return that.$curry().apply(this,_args); 
} 
} 
else return that.apply(this,args); 
} 
} 
//var curry=(function f(a,b,c){ 
// alert([a,b,c]); 
// }).$curry(); 
//curry(1)(2)(3); 
//curry(1,2)(3);

3.对象闭包。这个词是我造的,不过看一下注释里的调用便可以理解,这个函数原本是为了证明with和闭包的等价性,但却提供了一个极有价值的模式。
Function.prototype.$bind=function(object){ 
var callback = function () { 
return arguments[0]; 
} 
with(object){ 
return eval('callback(' + this.toString() + ')'); 
} 
} 
//var obj = {a:1,b:2}; 
//var bind=(function (){ 
// a=10; 
// b=11; 
//}).$bind(obj); 
//bind(); 
//alert(obj.a);

4. string.Format。怕是很多js coder都想有一个c#(java类似)里的string.Format方法,其实一点也不麻烦。
String.prototype.$format=function(){ 
var ret; 
for(var i=1;i<arguments.length;i++){ 
var exp = new RegExp('\\{' + (i-1) + '\\}','gm'); 
ret = (ret||this).replace(exp,arguments[i-1]); 
} 
return ret; 
} 
//alert("{0},{1},{4}".$format(0,1,2));

以后有机会还会陆续分享一些这样犀利的函数。暂且给些函数合计取个名字,就叫 p.js 吧。
Javascript 相关文章推荐
JQuery+JS实现仿百度搜索结果中关键字变色效果
Aug 02 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
Jan 23 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
Apr 02 Javascript
jquery专业的导航菜单特效代码分享
Aug 29 Javascript
js实现二级菜单渐隐显示
Nov 03 Javascript
JS中取二维数组中最大值的方法汇总
Apr 17 Javascript
动态加载js文件简单示例
Apr 21 Javascript
浅谈js算法和流程控制
Dec 29 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
Jan 22 Javascript
Angular.js通过自定义指令directive实现滑块滑动效果
Oct 13 Javascript
20多个小事例带你重温ES10新特性(小结)
Sep 29 Javascript
es6数组includes()用法实例分析
Apr 18 Javascript
js 操作css实现代码
Jun 11 #Javascript
图片连续滚动代码[兼容IE/firefox]
Jun 11 #Javascript
Javascript Tab 导航插件 (23个)
Jun 11 #Javascript
javascript 树控件 比较好用
Jun 11 #Javascript
javascript 禁止复制网页
Jun 11 #Javascript
JavaScript 动态改变图片大小
Jun 11 #Javascript
jQuery 学习 几种常用方法
Jun 11 #Javascript
You might like
php IP及IP段进行访问限制的代码
2008/12/17 PHP
PHP Session 变量的使用方法详解与实例代码
2013/09/11 PHP
PHP遍历数组的方法汇总
2015/04/30 PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
2016/07/20 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
js获取html页面节点方法(递归方式)
2013/12/13 Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
2015/09/24 Javascript
果断收藏9个Javascript代码高亮脚本
2016/01/06 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
使用重写url机制实现验证码换一张功能
2017/08/01 Javascript
elementui的默认样式修改方法
2018/02/23 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
vuex直接赋值的三种方法总结
2018/09/16 Javascript
JS+CSS3实现的简易钟表效果示例
2019/04/13 Javascript
vue设置一开始进入的页面教程
2019/10/28 Javascript
uni-app如何页面传参数的几种方法总结
2020/04/28 Javascript
JavaScript实现点击图片换背景
2020/11/20 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
Python基于回溯法子集树模板解决全排列问题示例
2017/09/07 Python
python 读取更新中的log 或其它文本方式
2019/12/24 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
澳大利亚首屈一指的鞋类品牌:Tony Bianco
2018/03/13 全球购物
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
美国渔具店:FishUSA
2019/08/07 全球购物
英语系毕业生自荐信
2013/10/31 职场文书
思想汇报范文
2013/11/04 职场文书
检讨书格式范文
2015/05/07 职场文书
锦旗赠语
2015/06/23 职场文书
学习党史心得体会2016
2016/01/23 职场文书
小学教师教学反思
2016/02/24 职场文书
三好学生评选事迹材料(2016精选版)
2016/02/25 职场文书
市直属机关2016年主题党日活动总结
2016/04/05 职场文书
导游词之苏州阳澄湖
2019/11/15 职场文书