JavaScript 徧函數(shù)
■知識(shí)點(diǎn)
徧函數(shù)是函數(shù)柯里化運(yùn)算的一種特定應(yīng)用場景。它是把一個(gè)函數(shù)的某些參數(shù)先固化,也就是設(shè)置默認(rèn)值,返回一個(gè)新的函數(shù),在新函數(shù)中繼續(xù)接收剩余參數(shù),這樣調(diào)用這個(gè)新函數(shù)會(huì)更簡單。
■實(shí)例設(shè)計(jì)
【示例1】下面是一個(gè)類型檢測函數(shù),共接收兩個(gè)參數(shù):第1個(gè)參數(shù)表示類型字符串,第2個(gè)參數(shù)表示檢測的數(shù)據(jù)。
var isType=function(type, obj){
return Object.prototype.toString.call(obj)=='[object ' + type+ ']';
}
該函數(shù)包含兩個(gè)設(shè)置參數(shù),使用時(shí)比較煩瑣。一般按如下方式進(jìn)行設(shè)計(jì):
var isString=function(obj){
return Object.prototype.toString.call(obj)=='[object String]';
};
var isFunction=function(obj){
return Object.prototype.toString.call(obj)=='[object Function]';
};
函數(shù)接收的參數(shù)單一,檢測的功能也單一和明確,這樣更方便在表達(dá)式運(yùn)算中有針對(duì)性的調(diào)用。下面對(duì)isType()函數(shù)進(jìn)行扁平化設(shè)計(jì),代碼如下:
var isType=function (type) { //徧函數(shù)
return function(obj){
return Object.prototype?toString.call(obj)==’ [object ' + type+ ']';
}
}
然后根據(jù)徧函數(shù)獲取不同類型檢測函數(shù):
var isString = isType("String"); //專一功能檢測函數(shù),檢測字符串
var isFunction = isType("Function"); //專一功能檢測函數(shù),檢測函數(shù)
應(yīng)用代碼:
console.log( isString("12")); //true
console.log( isFunction(function(){})); //true
console.log( isFunction( {} )); //false
【示例2】下面的示例設(shè)計(jì)一個(gè)wmp()徧函數(shù),該函數(shù)的主要功能是產(chǎn)生一個(gè)HTML包裹函數(shù),即樣式標(biāo)簽。
function wrap(tag) {
var stag = '<' + tag + '>';
var etag = '</' + tag.replace(/s.*/, '') + '>';
return function(x) {
return stag + x + etag;
}
}
var b = wrap('b');
document.write (b ('粗體字'));
var i = wrap('i');
document.write (i ('斜體字'));
var u = wrap(1u1);
document.write (u ('下劃線字'));
點(diǎn)擊加載更多評(píng)論>>