ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript は適用と引数を再利用するメソッドを使用します_JavaScript スキル

JavaScript は適用と引数を再利用するメソッドを使用します_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 17:12:301024ブラウズ

まず、多くの静的ツール メソッドがアタッチされたシングルトン オブジェクトがあります。そのうちの 1 つは each で、配列またはオブジェクトを走査するために使用されます。

コードをコピーします コードは次のとおりです。

varativeForEach = [].forEach
var NativeMap = [].map
var util = {
each: function (obj, iterator, context) {
if (obj == null) return
if (nativeForEach && obj.forEach === nativeforeach){
){if(iterator.call(obj [k] || context、obj [k]、k、obj)=== true) return

map: function(obj, iterator, context) {
var results = []
if (obj == null) return results
if (nativeMap && obj.map == = nativemap)obj.map(iterator、context))



コレクション (配列、ハッシュ) を操作する、every、some などのユーティリティ関数もあります。使用する場合はutil.xxメソッドを使用してください。

コレクション クラスが定義されている場合、このクラス内にコレクション データが存在します。





コードをコピー

コードは次のとおりです。

function Collection(data) {

this.data = データ || []

// 他のプロパティ

// this.xxx = yyy

}

Collection.prototype = {

// メソッド } util のメソッドを
などのコレクション クラスに簡単にコピーできます。




コードをコピーします


コードは次のとおりです。

function copyMethod(clazz, obj) {

for (obj の var メソッド) { clazz.prototype[method] = function() {

var args = [].slice.call(arguments)

var target = this.data

args.unshift(target)

obj[method].apply(obj, args) } } } copyMethod(Collection, util)

このようにコピーすると、Collectionインスタンスはutil上のメソッドを持つことになり、utilが操作するコレクションオブジェクト(第一引数)はCollectionのthis.dataになります。次のように this.data を直接走査できます。





コードをコピー


コードは次のとおりです。

var coll = new Collection([10, 20, 30 ])

// Traverse

coll.each(function(k) {

console.log(k)

})

// Operate var arr = coll.map(function(k) { return k - 5 }) console.log(arr) // 5, 15, 25

このモードは、jQuery などの多くのオープン ソース ライブラリで使用されており、その $.each/$.map は $().each/$().map にコピーされるのが便利です。

もう 1 つの例は Backbone で、その _.each/_.map/_.every/_.chain (およびその他の多く) が Collection プロトタイプにコピーされます。

コードをコピー コードは次のとおりです:

// 実装するメソッドに下線を付けます。
// バックボーン コレクションの中心的な有用性の 90% が実際に実装されています
// ここにあります:
varmethods = ['forEach', 'each', 'map', 'collect ', 'reduce', 'foldl',
'inject', 'reduceRight', 'foldr', 'find', 'detect', 'filter', 'select',
'reject', 'every ', ' all'、'some'、'any'、'include'、'contains'、'invoke'、
'max'、'min'、'toArray'、'size'、'first'、' head'、'take'、'initial'、'rest'、
'tail'、'drop'、'last'、'without'、'difference'、'indexOf'、'shuffle'、
' lastIndexOf', 'isEmpty', 'chain'];

// 各 Underscore メソッドを `Collection#models` へのプロキシとして混ぜます。 🎜> コレクション .prototype[メソッド] = function() {
var args = slide.call(arguments);
args.unshift(this.models);
return _[メソッド].apply(_) , 引数) ;
});


また、_.keys / _.values / _.pairs / _.invert / _.pick などのオブジェクト操作の実用的なメソッドが Backbone.Model (1.0 の新機能) にコピーされました。

コードをコピー

コードは次のとおりです:var modelMethods = ['keys', ' value', 'pairs', 'invert', 'pick', 'omit'];
// `Model#attributes` へのプロキシとして各 Underscore メソッドを混ぜます。 modelMethods、関数 (メソッド) {
Model.prototype[メソッド] = function() {
var args = slide.call(arguments);
args.unshift(this.attributes); _[メソッド ].apply(_, args);
};


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。