犀利的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 相关文章推荐
JavaScript 异步调用框架 (Part 4 - 链式调用)
Aug 04 Javascript
JavaScript中__proto__与prototype的关系深入理解
Dec 04 Javascript
Js base64 加密解密介绍
Oct 11 Javascript
jQuery制作效果超棒的手风琴折叠菜单
Apr 03 Javascript
javascript中返回顶部按钮的实现
May 05 Javascript
深入浅出理解javaScript原型链
May 09 Javascript
jQuery插件Validate实现自定义校验结果样式
Jan 18 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
Jul 28 Javascript
Angular 4.X开发实践中的踩坑小结
Jul 04 Javascript
webpack实现热加载自动刷新的方法
Jul 30 Javascript
angular中不同的组件间传值与通信的方法
Nov 04 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
Jan 31 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实现视频文件上传完整实例
2014/08/28 PHP
CodeIgniter多语言实现方法详解
2016/01/20 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
使用基于jquery的gamequery插件做JS乒乓球游戏
2011/07/31 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
jQuery带进度条全屏图片轮播特效代码分享
2020/06/28 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
2015/11/29 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
2016/12/08 Javascript
正则 js分转元带千分符号详解
2017/03/08 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
详解axios 全攻略之基本介绍与使用(GET 与 POST)
2017/09/15 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
python、java等哪一门编程语言适合人工智能?
2017/11/13 Python
python3+PyQt5使用数据库窗口视图
2018/04/24 Python
对python周期性定时器的示例详解
2019/02/19 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
python 实现turtle画图并导出图片格式的文件
2019/12/07 Python
Python实现链表反转的方法分析【迭代法与递归法】
2020/02/22 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
2020/05/25 Python
面向对象编程OOP的优点
2013/01/22 面试题
计算s=f(f(-1.4))的值
2014/05/06 面试题
银行职员个人的工作自我评价
2014/02/15 职场文书
《青海高原一株柳》教学反思
2014/04/25 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
读后感作文评语
2014/12/25 职场文书
会计主管岗位职责
2015/04/02 职场文书
民事撤诉申请书范本
2015/05/18 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
一文搞懂python异常处理、模块与包
2021/06/26 Python