使用应用程序和参数重用方法的Javascript
首先,有一个对象挂起许多静态工具方法,其中一个是每个,用于遍历数组或对象。复制代码代码如下所示:
无功nativeforeach = { }。foreach
无功nativemap = { }。地图
VaR工具= { {
一:功能(obj,迭代器,上下文){
如果(obj = = null)返回
如果(nativeforeach obj.foreach = nativeforeach){
obj.foreach(迭代器,上下文)
否则如果}(obj.length = = = + obj。长度){
对于(var i = 0;i < obj.length;i++){
如果(iterator.call(obj {我} | |语境,obj {我},我,obj)=真正的回报)
}
{人}
(VaR K为OBJ){
如果(iterator.call(obj { k } | | obj { }的背景下,K,K,obj)=真正的回报)
}
}
},
图:功能(obj,迭代器,上下文){
var结果{ }
如果(obj = = null)返回结果
如果(nativemap obj.map返回obj.map(迭代器= nativemap),上下文)
this.each(obj,功能(Val,我,Coll){
结果{我} = iterator.call(背景,瓦迩,我,Coll)
})
返回结果
}
}
还有工具数组(哈希)如每一个操作,一些等。使用util.xx模式时使用。
如果定义了一个集合类,则该类中有一组数据集合。
复制代码代码如下所示:
函数集合(数据){
this.data =数据| | { }
其他属性
/ / this.xxx = YYY
}
collection.prototype = { {
一些方法
}
它是在利用对集合类的复制方法非常方便,如
复制代码代码如下所示:
功能copymethod(类,对象){
对于(OBJ VaR方法){
Clazz。原型{方法} =函数(){
var args = { }。slice.call(参数)
VaR目标= this.data
args.unshift(目标)
obj {方法}申请(obj,args)。
}
}
}
CopyMethod(收集、利用)
这样的副本后,收集的实例有一个在使用方法和集合对象(第一个参数)的使用操作是收藏的this.data,this.data可以遍历直接如下。
复制代码代码如下所示:
var科尔=新的集合({ 10, 20, 30 })
遍历
coll.each(函数(K){)
console.log(K)
})
操作
var arr = coll.map(函数(K){)
返回k - 5
})
console.log(ARR) / 5, 15, 25
这种模式被用于许多开源库,如jQuery,它的美元很容易被复制到$()。
像骨干,其_。每个 / _。图/ _。每天/ _。链(大量的)复制到收藏的原型。
复制代码代码如下所示:
强调我们想要在集合上实现的方法。
实际实现的90%个核心有用性
在这里/右边/这里:
VaR方法= { 'foreach ',每天,'map ','collect ','reduce ','foldl,
注入,'reduceright ','foldr',‘','detect ','filter ','select,
拒绝,每个','all',一些,任何的,'include ','contains ','invoke,
'最大','min ','toarray ','size ','all',很,','initial '休息',
'尾',放弃',' ',没有','difference ','indexof ','shuffle,
字符串,'isempty ','chain};
组合中每个下划线法 /代理`收集#模型`。
_。每个(方法、函数(方法){
集合.原型{方法} =函数(){
var args = slice.call(参数);
Args.unshift(的模型);
返回_ {方法}申请(_,args);
};
});
再次,_。钥匙 / / _ _。值。对/ _。仰 / _。接等实用方法的对象操作的已复制模型(1)的骨干。
复制代码代码如下所示:
VaR模型= { 'keys ','values ','pairs ','invert ','pick ','omit};
组合中每个下划线法 /代理`模型#属性`。
_。每个(模型,函数(方法){
模型{方法} =函数(){
var args = slice.call(参数);
Args.unshift(这个属性);
返回_ {方法}申请(_,args);
};
});