犀利的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中事件与动画的总结分享
May 24 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
Aug 06 Javascript
Vue.js实现一个todo-list的上移下移删除功能
Jun 26 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
Sep 28 Javascript
js实现二级菜单点击显示当前内容效果
Apr 28 Javascript
JS实现的简单下拉框联动功能示例
May 11 Javascript
微信小程序使用wxParse解析html的实现示例
Aug 30 Javascript
微信小程序的开发范式BeautyWe.js入门详解
Jul 10 Javascript
Layui 解决表格异步调用后台分页的问题
Oct 26 Javascript
Vue 中使用 typescript的方法详解
Feb 17 Javascript
基于脚手架创建Vue项目实现步骤详解
Aug 03 Javascript
比较node.js和Deno
Apr 27 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中Session的概念
2006/10/09 PHP
基于mysql的bbs设计(二)
2006/10/09 PHP
php生成xml简单实例代码
2009/12/16 PHP
解析php如何将日志写进syslog
2013/06/28 PHP
Symfony2实现在controller中获取url的方法
2016/03/18 PHP
功能强大的PHP发邮件类
2016/08/29 PHP
Thinkphp 中 distinct 的用法解析
2016/12/14 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
JavaScript中“+”的陷阱深刻理解
2012/12/04 Javascript
javascript中onclick(this)用法介绍
2013/04/19 Javascript
验证手机号码的JS方法分享
2013/09/10 Javascript
判断JS对象是否拥有某种属性的两种方式
2013/12/02 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
原生javascript实现图片放大镜效果
2017/01/18 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
2017/04/10 Javascript
Node.js连接mongodb实例代码
2017/06/06 Javascript
AngularJS ui-router刷新子页面路由的方法
2018/07/23 Javascript
又拍云 Node.js 实现文件上传、删除功能
2018/10/28 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
python解析发往本机的数据包示例 (解析数据包)
2014/01/16 Python
Django logging配置及使用详解
2019/07/23 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
Python统计分析模块statistics用法示例
2019/09/06 Python
超市实习总结自我鉴定
2013/09/19 职场文书
机械设计专业应届生求职信
2013/11/21 职场文书
技术人员面试提纲
2013/11/28 职场文书
纪律教育月活动总结
2014/08/26 职场文书
部队个人年终总结
2015/03/02 职场文书
小学语文国培研修日志
2015/11/13 职场文书
Python实现天气查询软件
2021/06/07 Python