犀利的js 函數(shù)集合
更新時(shí)間:2009年06月11日 22:28:24 作者:
和同事討論js時(shí),我說較為理想的狀態(tài)是,把js當(dāng)一把好用的匕首,隨手拿來,捅一刀子就走。話雖如此,但現(xiàn)實(shí)生活中大部分時(shí)候的情況是不理想的。
那么分享幾個(gè)理想狀態(tài)的js原型函數(shù)。大部分整理修改自月影的blog
另外推薦一下月影的書——"王者歸來",如果你每周js的coding時(shí)間大于5小時(shí),還是值得一讀的。
1.函數(shù)膠水,有很多同學(xué)用jq用習(xí)慣了,有時(shí)就為一個(gè)類似于c#里的event+=delegate而用jq,似乎有點(diǎn)劃不來,這幾原型函數(shù)就夠了。
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.函數(shù)柯靈化,柯靈化是面向函數(shù)式語言的一個(gè)重要特性,和大部分人所持有的面向過程的編程思想?yún)^(qū)別很大,就我愚見,日常工作中,函數(shù)柯靈化除了能把一些代碼寫得優(yōu)雅(或許還有詭異)以外,不是特別的"必要"。
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.對象閉包。這個(gè)詞是我造的,不過看一下注釋里的調(diào)用便可以理解,這個(gè)函數(shù)原本是為了證明with和閉包的等價(jià)性,但卻提供了一個(gè)極有價(jià)值的模式。
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都想有一個(gè)c#(java類似)里的string.Format方法,其實(shí)一點(diǎn)也不麻煩。
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));
以后有機(jī)會還會陸續(xù)分享一些這樣犀利的函數(shù)。暫且給些函數(shù)合計(jì)取個(gè)名字,就叫 p.js 吧。
另外推薦一下月影的書——"王者歸來",如果你每周js的coding時(shí)間大于5小時(shí),還是值得一讀的。
1.函數(shù)膠水,有很多同學(xué)用jq用習(xí)慣了,有時(shí)就為一個(gè)類似于c#里的event+=delegate而用jq,似乎有點(diǎn)劃不來,這幾原型函數(shù)就夠了。
復(fù)制代碼 代碼如下:
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.函數(shù)柯靈化,柯靈化是面向函數(shù)式語言的一個(gè)重要特性,和大部分人所持有的面向過程的編程思想?yún)^(qū)別很大,就我愚見,日常工作中,函數(shù)柯靈化除了能把一些代碼寫得優(yōu)雅(或許還有詭異)以外,不是特別的"必要"。
復(fù)制代碼 代碼如下:
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.對象閉包。這個(gè)詞是我造的,不過看一下注釋里的調(diào)用便可以理解,這個(gè)函數(shù)原本是為了證明with和閉包的等價(jià)性,但卻提供了一個(gè)極有價(jià)值的模式。
復(fù)制代碼 代碼如下:
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都想有一個(gè)c#(java類似)里的string.Format方法,其實(shí)一點(diǎn)也不麻煩。
復(fù)制代碼 代碼如下:
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));
以后有機(jī)會還會陸續(xù)分享一些這樣犀利的函數(shù)。暫且給些函數(shù)合計(jì)取個(gè)名字,就叫 p.js 吧。
相關(guān)文章
javascript+html5實(shí)現(xiàn)繪制圓環(huán)的方法
這篇文章主要介紹了javascript+html5實(shí)現(xiàn)繪制圓環(huán)的方法,實(shí)例分析了javascript實(shí)現(xiàn)html5基于canvas繪制圓環(huán)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07ES5 ES6中Array對象去除重復(fù)項(xiàng)的方法總結(jié)
這篇文章主要給大家介紹了Array對象去除重復(fù)項(xiàng)的相關(guān)資料,文中通過示例代碼詳細(xì)介紹了在ES5和ES6中Array對象去除重復(fù)項(xiàng)的方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-04-04javascript設(shè)計(jì)模式 – 裝飾模式原理與應(yīng)用實(shí)例分析
這篇文章主要介紹了javascript設(shè)計(jì)模式 – 裝飾模式,結(jié)合實(shí)例形式分析了javascript裝飾模式基本概念、原理、應(yīng)用場景及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04JS調(diào)用頁面表格導(dǎo)出excel示例代碼
這篇文章主要介紹了JS調(diào)用頁面表格導(dǎo)出excel的具體實(shí)現(xiàn),需要的朋友可以參考下2014-03-03微信小程序?qū)崿F(xiàn)手風(fēng)琴折疊面板
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)手風(fēng)琴折疊面板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05