犀利的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在IE下使用未闭合的xml代码创建元素时的Bug介绍
Jan 10 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
Apr 26 Javascript
浅谈Javascript Base64 加密解密
Dec 28 Javascript
jquery插件unobtrusive实现片段式加载
Jun 15 Javascript
javascript中JSON对象与JSON字符串相互转换实例
Jul 11 Javascript
JavaScript实现定时隐藏与显示图片的方法
Aug 06 Javascript
javascript中tostring()和valueof()的用法及两者的区别
Nov 16 Javascript
JS实现的样式切换功能tableCSS实例
Dec 30 Javascript
JS组件系列之MVVM组件构建自己的Vue组件
Apr 28 Javascript
纯js代码生成可搜索选择下拉列表的实例
Jan 11 Javascript
一些你可能不熟悉的JS知识点总结
Mar 15 Javascript
js定义类的方法示例【ES5与ES6】
Jul 30 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 ADODB使用方法集锦
2008/03/25 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
在WordPress中使用wp-cron插件来设置定时任务
2015/12/10 PHP
php实现给一张图片加上水印效果
2016/01/02 PHP
PDO::exec讲解
2019/01/28 PHP
js动态给table添加/删除tr的方法
2013/08/02 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
JavaScript中的Object对象学习教程
2016/05/20 Javascript
关于JS 预解释的相关理解
2016/06/28 Javascript
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
详解关于webpack多入口热加载很慢的原因
2019/04/24 Javascript
vue 组件之间事件触发($emit)与event Bus($on)的用法说明
2020/07/28 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
Python的Flask框架中实现分页功能的教程
2015/04/20 Python
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
python实现横向拼接图片
2020/03/23 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
2020/04/20 Python
Django数据统计功能count()的使用
2020/11/30 Python
Python关于拓扑排序知识点讲解
2021/01/04 Python
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
2014/04/16 HTML / CSS
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
什么是封装
2013/03/26 面试题
客服专员岗位职责
2014/02/28 职场文书
2014领导干部四风问题查摆思想汇报
2014/09/13 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
2014年人大工作总结
2014/12/10 职场文书
黄石寨导游词
2015/02/05 职场文书
幼儿教师辞职信范文
2015/03/02 职场文书
护士2015年终工作总结
2015/04/29 职场文书
李强为自己工作观后感
2015/06/11 职场文书
使用HTML+Css+transform实现3D导航栏的示例代码
2021/03/31 HTML / CSS
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL
WIN10使用IIS部署ftp服务器详细教程
2022/08/05 Servers