犀利的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 相关文章推荐
JSON+JavaScript处理JSON的简单例子
Mar 20 Javascript
深入理解Javascript中的循环优化
Nov 09 Javascript
jquery实现显示已选用户
Jul 21 Javascript
javascript中使用new与不使用实例化对象的区别
Jun 22 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
Apr 21 jQuery
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
Jul 09 Javascript
Angular中点击li标签实现更改颜色的核心代码
Dec 08 Javascript
详解使用webpack构建多页面应用
Dec 21 Javascript
JS实现数组的增删改查操作示例
Aug 29 Javascript
深入解读VUE中的异步渲染的实现
Jun 19 Javascript
原生js实现自定义滚动条
Jan 20 Javascript
前端vue+express实现文件的上传下载示例
Feb 18 Vue.js
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 imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
PHP实现动态获取函数参数的方法示例
2018/04/02 PHP
RR vs IO BO3 第一场2.13
2021/03/10 DOTA
快速排序 php与javascript的不同之处
2011/02/22 Javascript
JavaScript中的变量声明早于赋值分析
2012/03/01 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
2013/12/05 Javascript
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
浅析javascript的return语句
2015/12/15 Javascript
深入分析javascript中console命令
2016/08/14 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
2017/08/29 jQuery
VUE2.0+Element-UI+Echarts封装的组件实例
2018/03/02 Javascript
Node.js笔记之process模块解读
2018/05/31 Javascript
jQuery AJAX 方法success()后台传来的4种数据详解
2018/08/08 jQuery
解决VUE中document.body.scrollTop为0的问题
2018/09/15 Javascript
简单的Python的curses库使用教程
2015/04/11 Python
python实现斐波那契数列的方法示例
2017/01/12 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
2017/12/11 Python
基于python OpenCV实现动态人脸检测
2018/05/25 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
2019/08/26 Python
django中间键重定向实例方法
2019/11/10 Python
Python二次规划和线性规划使用实例
2019/12/09 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
2020/02/29 Python
python datetime时间格式的相互转换问题
2020/06/11 Python
经济管理专业毕业生自荐信范文
2014/01/02 职场文书
酒店前厅员工辞职信
2014/01/08 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
路政管理求职信
2014/06/18 职场文书
母亲节寄语大全
2015/02/27 职场文书
酒店员工辞职信范文
2015/02/28 职场文书
2015新学期校长寄语(3篇)
2015/03/25 职场文书
房地产公司财务总监岗位职责
2015/04/03 职场文书
重阳节简报
2015/07/20 职场文书
致接力运动员加油稿
2015/07/21 职场文书
Java用自带的Image IO给图片添加水印
2021/06/15 Java/Android