国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > JavaScript > 正文

javascript利用apply和arguments復用方法

2019-11-20 21:35:28
字體:
來源:轉載
供稿:網友

首先,有個單例對象,它上面掛了很多靜態工具方法。其中有一個是each,用來遍歷數組或對象。

復制代碼 代碼如下:

var nativeForEach = [].forEach
var nativeMap = [].map
var util = {
    each: function (obj, iterator, context) {
        if (obj == null) return
        if (nativeForEach && obj.forEach === nativeForEach) {
          obj.forEach(iterator, context)
        } else if ( obj.length === +obj.length ) {
            for (var i = 0; i < obj.length; i++) {
                if (iterator.call(obj[i] || context, obj[i], i, obj) === true) return
            }
        } else {
            for (var k in obj) {
                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) return obj.map(iterator, context)     
        this.each(obj, function(val, i, coll) {
            results[i] = iterator.call(context, val, i, coll)
        })
        return results
    }
}

還有諸如every、some等對集合(Array,Hash)操作的工具函數。使用時采用util.xx方式。

如果定義了一個集合類,這個類內部有集合數據。

復制代碼 代碼如下:

function Collection(data) {
    this.data = data || []
    // some other property
    // this.xxx = yyy
}
Collection.prototype = {
    // some method
}

可以很方便的把util上的方法拷貝到集合類上,如

復制代碼 代碼如下:

function copyMethod(clazz, obj) {
    for (var method in obj) {
        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]) 

// 遍歷
coll.each(function(k) {
    console.log(k)
})

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

這種模式在很多開源庫中使用,比如jQuery,它的 $.each/$.map 很方便的拷貝到了 $().each/$().map。

又如Backbone,它的 _.each/_.map/_.every/_.chain (還有很多)都拷貝到了 Collection的原型上。

復制代碼 代碼如下:

// Underscore methods that we want to implement on the Collection.
// 90% of the core usefulness of Backbone Collections is actually implemented
// right here:
var methods = ['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'];

// Mix in each Underscore method as a proxy to `Collection#models`.
_.each(methods, function(method) {
  Collection.prototype[method] = function() {
    var args = slice.call(arguments);
    args.unshift(this.models);
    return _[method].apply(_, args);
  };
});

又有,把 _.keys / _.values / _.pairs / _.invert / _.pick 等對對象操作的實用方法拷貝了 Backbone.Model上 (1.0新增)

復制代碼 代碼如下:

var modelMethods = ['keys', 'values', 'pairs', 'invert', 'pick', 'omit'];

// Mix in each Underscore method as a proxy to `Model#attributes`.
_.each(modelMethods, function(method) {
  Model.prototype[method] = function() {
    var args = slice.call(arguments);
    args.unshift(this.attributes);
    return _[method].apply(_, args);
  };
});

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产精选在线观看| 交换国产精品视频一区| 激情小说 在线视频| 精品入口蜜桃| 亚洲精品国自产拍在线观看| 夜夜操天天干| 青青草在线视频免费观看| 亚洲免费国产| 国产在线观看色| 国产激情99| 思思99精品视频在线观看| 麻豆国产在线播放| 国产日韩欧美精品一区二区三区| 国产黄大片在线观看画质优化| 国产对白国语对白| 日本视频二区| 精品入口蜜桃| 中文字幕色视频| 国产寡妇树林野战在线播放| 在线视频中文字幕| √天堂资源地址在线官网| 亚洲男人的天堂成人| 国产一区二区三区不卡在线| 亚洲一本大道| 91涩漫在线观看c| 欧美性猛交p30| 影音av资源站| 国产日产一区二区| 国内外激情在线| 精品亚洲成a人片在线观看| 亚洲夜夜综合| 国产91足控脚交在线观看| 国产乱视频在线观看| 国产精品久久久久久久久鸭| 国产精品被窝福利一区| 国产在线精品一区二区不卡| 精品无人区乱码1区2区3区免费| 开心激情五月婷婷| gogo在线观看| 777电影在线观看| 国产一级性片| 丁香婷婷激情| 国产美女视频网站| 国产精品自产拍在线观看2019| 热99在线观看| 免费在线看v| 免费男女羞羞的视频网站中文字幕| 午夜在线观看91| 天天插天天射| 日本一本久久| 久久综合精品视频| 久久精品最新免费国产成人| 男女午夜视频在线观看| 就爱干草视频| 国产婷婷视频在线| 91激情在线| 午夜亚洲成人| 国产精品亚洲色图| 国产福利资源| 日本不卡1区2区3区| 麻豆av在线| 国产高清大尺度一区二区不卡| 9999在线视频| 九九热在线观看视频| а√天堂8资源在线官网| 久久精品最新免费国产成人| 成人无遮挡免费网站视频在线观看| 豆国产97在线|亚洲| 国产精品日日爱| 四虎精品视频| 国产精品9区| 麻豆精品不卡国产免费看| 国产羞羞视频在线播放| 亚洲欧美日韩一区成人| 大香伊人中文字幕精品| 在线一二三区| 国产小视频福利在线| 亚洲精品成人a| 国产日本在线| 免费的黄网站在线观看| 国产精品久久久久白浆| 免费看ww视频网站入口| 国产三级av在线| 久久久久久91精品色婷婷| 精品视频三区| 国产日韩精品在线看| 爱福利在线视频| 国产对白在线| 国产精品777一区二区| 成在线人视频免费视频| www.麻豆av.com| 在线中文字幕资源| 国产精品日日爱| 五月婷婷丁香激情| 欧美一级久久久久久久久大| 国产超碰在线观看| 国产人成在线观看| 国产污污在线观看| 国产一二三区精品视频| 老鸭窝av在线| 免费的黄网站在线观看| 操人视频91| 在线国产一级| 夜色资源网av在先锋网站观看| 国产日韩欧美一区二区三区视频| 国产女王在线**视频 | 成年人在线观看| 在线视频观看你懂的| 国产黄a三级三级三级av在线看| 国产一级激情| 91精选福利| 日本欧美在线视频免费观看| av中文天堂在线| 麻豆国产在线播放| 中中文字幕av在线| 国产69精品久久app免费版 | 五月婷婷导航| 国产黄a三级三级三级av在线看| 国产黄色片在线播放| 在线视频观看国产| 免费视频中文字幕| 国产卡1卡2卡三卡在线| 尤物视频在线观看| 国产羞羞视频在线观看| 91看片在线观看| 九九热视频在线观看| 国产无遮挡又黄又爽免费软件| 国产一级片在线| 中文天堂av| 黄色激情网址| 国产精品99999| 午夜在线视频| 男人天堂亚洲| 精品一区二区三区高清免费不卡| 一本免费视频| 国产精品一区二区三区高清在线| 国产激情视频一区二区| 日本在线免费中文字幕| www.91在线播放| 国产精品久久在线| 九色福利视频| 日本在线观看| 在线国产网址| 国产欧美日韩专区| 成年女人在线视频| 亚洲综合激情六月婷婷在线观看| 天堂中文字幕在线| 欧美韩日国产| 精品剧情v国产在线观看| 亚洲第一成人在线视频| 国产午夜视频| 日本中文字幕在线视频| eeuss影院www在线观看| 福利视频网址导航| 日本欧洲一区| 四虎免费播放| 依依成人在线| 国产福利在线免费观看| 中中文字幕av在线| 黄色激情网址| 国产中文字幕在线视频| eeuss影院在线观看第一页| 2018中文字幕在线| 精品一区二区观看| 在线免费观看黄色av| 国产超碰在线| 伊人网在线观看| 97视频网站| 国产成a人亚洲精v品| 中文字幕视频在线免费| 中文字幕色视频| √天堂8资源中文在线| 综合激情亚洲| 国产精品毛片一区二区三区四区 | 精品国内一区二区三区免费视频| 国产色婷婷在线| 2018狠狠干| 在线免费观看黄色av| av网址在线播放| 日本在线视频www鲁啊鲁| 美女av在线播放| 国产无套粉嫩白浆在线2022年 | 精品国产美女福利到在线不卡| 国产精品久久久久永久免费看| 国产福利免费观看| 性色视频在线| 国产乱妇乱子在线播视频播放网站 | 99在线播放| 日韩黄色成人| 国产天堂在线| 青青草原国产在线| 国产精品被窝福利一区| av在线播放av| 国产精品视频一区二区久久| 亚洲欧美精选| 国产天堂在线| 狠狠综合久久久综合| 国产精品扒开做爽爽爽的视频| 永久av在线| 欧美激情福利视频在线观看免费|