亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

$.extend 的一個小問題

2019-11-20 12:13:29
字體:
來源:轉載
供稿:網友

最近一直在搞移動端,也由于自己對jQuery比較熟悉,再加上Zepto提供了跟jQuery一樣的API,所以就選擇了Zepto作為開發框架。

由于是移動端開發,所以也應用了一些ES5新增的API,比如forEach,下面就是我寫的代碼的一些示例:

list.forEach(function(v) { return !!v;})

我天真的以為forEach就跟jQuery的each一樣,只要我的返回值為false,它就會中斷循環,于是,類似這樣的遍歷代碼寫了不少(真的是懶得為每個遍歷去聲明變量啊)

寫了一段時間之后我突然發現,forEach的回調函數并不能中斷循環,于是,我便在Array.prototype上面掛了個函數,然后replaceAll,完美。

 Array.prototype.foreach = function(fn) {  var i = 0, len = this.length;  for (; i < len; ++i) {    if (fn(this[i], i) === false) {     break;    }   } };

直到有一天,我想做點優化,考慮到客戶端需要保存的json過大(沒騙你,最大可以去到20M),stringify的時候太過耗時,會阻塞UI,所以我就用Worker在后臺開個線程,專門用來stringify這個json,類似于這樣子:

復制代碼 代碼如下:

addEventListener("message", function(e) {
  var data = e.data;
  data = JSON.stringify(data);
  postMessage(data);
}, false);

posMesage:

復制代碼 代碼如下:

worker.postMessage(data)

但是控制臺卻輸出了以下的錯誤信息:

復制代碼 代碼如下:

Uncaught DataCloneError: Failed to execute 'postMessage' on 'Worker': An object could not be cloned.

坑爹,這天殺的為什么連個json都復制不了,于是乎,我開始尋找原因,讓我發現了我的json里面有這個東西:

天啊,這是什么鬼,這個foreach為什么跑進來了,我看了一下編輯器里面的$.extend(true, {}, obj)正在那里瑟瑟發抖,我不禁懷疑,不會是你丫的在作怪吧。于是乎,我查看了一下$.extend的源碼:

 function extend(target, source, deep) {  for (key in source)   if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {    if (isPlainObject(source[key]) && !isPlainObject(target[key]))     target[key] = {}    if (isArray(source[key]) && !isArray(target[key]))     target[key] = []    extend(target[key], source[key], deep)   }   else if (source[key] !== undefined) target[key] = source[key] } // Copy all but undefined properties from one or more // objects to the `target` object. $.extend = function(target){  var deep, args = slice.call(arguments, 1)  if (typeof target == 'boolean') {   deep = target   target = args.shift()  }  args.forEach(function(arg){ extend(target, arg, deep) })  return target }

我的天啊,還真是這貨在作怪啊,遍歷數組用for...in..也就算了,但是 else if (source[key] !== undefined) target[key] = source[key] 這里的條件能不能嚴肅點啊,加個hasOwnProperty檢查一下不會浪費多少時間吧。淚流滿面

被Zepto坑了之后,我立馬去找jQuery投訴,希望它能安慰我一下,沒想到:

jQuery.extend = jQuery.fn.extend = function() {  var options, name, src, copy, copyIsArray, clone,    target = arguments[0] || {},    i = 1,    length = arguments.length,    deep = false;  // Handle a deep copy situation  if ( typeof target === "boolean" ) {    deep = target;    target = arguments[1] || {};    // skip the boolean and the target    i = 2;  }  // Handle case when target is a string or something (possible in deep copy)  if ( typeof target !== "object" && !jQuery.isFunction(target) ) {    target = {};  }  // extend jQuery itself if only one argument is passed  if ( length === i ) {    target = this;    --i;  }  for ( ; i < length; i++ ) {    // Only deal with non-null/undefined values    if ( (options = arguments[ i ]) != null ) {      // Extend the base object      for ( name in options ) {        src = target[ name ];        copy = options[ name ];        // Prevent never-ending loop        if ( target === copy ) {          continue;        }        // Recurse if we're merging plain objects or arrays        if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {          if ( copyIsArray ) {            copyIsArray = false;            clone = src && jQuery.isArray(src) ? src : [];          } else {            clone = src && jQuery.isPlainObject(src) ? src : {};          }          // Never move original objects, clone them          target[ name ] = jQuery.extend( deep, clone, copy );        // Don't bring in undefined values        } else if ( copy !== undefined ) {          target[ name ] = copy;        }      }    }  }  // Return the modified object  return target;};

這貨也是 else if ( copy !== undefined ) {target[ name ] = copy;} 就交代了,我的親娘啊。

最后迫不得已,只得自己寫了一個。

總結:當你要使用$.extend的時候,不要輕易在Array.prototype和Object.prototype掛上你自定義的屬性和方法,不然,你以后可能要去找bug了。

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩中文字幕在线| 日韩欧美在线字幕| 尤物九九久久国产精品的分类| 国产视频精品免费播放| 亚洲精品久久久久久久久| 成人网中文字幕| 一本大道香蕉久在线播放29| 亚洲国产另类 国产精品国产免费| 亚洲丝袜av一区| 亚洲天堂男人天堂女人天堂| 国产精品自产拍在线观看中文| 成人做爽爽免费视频| 97国产精品久久| 欧美成人免费在线观看| 国产视频欧美视频| 国产视频久久久久久久| 精品国产区一区二区三区在线观看| 亚洲二区在线播放视频| 91久久久精品| 欧美亚洲日本黄色| 久99九色视频在线观看| 午夜精品久久久久久久久久久久| 日韩欧美国产成人| 成人免费网站在线观看| 综合网中文字幕| 97精品久久久中文字幕免费| 中文字幕在线精品| 中文字幕日韩有码| 国产精品一区二区三区久久| 久久中文字幕视频| 自拍偷拍亚洲欧美| 久久综合电影一区| 久久香蕉国产线看观看网| 国语自产精品视频在免费| 久久天堂av综合合色| 国产精品久久久久久五月尺| 91亚洲国产精品| 久久久999精品免费| 91精品国产91久久久| 欧美国产亚洲精品久久久8v| 日韩av影视综合网| 欧美精品久久久久久久久久| 精品国产户外野外| 日韩电影中文字幕av| 久久精品一区中文字幕| 欧美性xxxxxxxxx| 欧美电影在线观看| 88xx成人精品| 美女撒尿一区二区三区| 亚洲欧洲视频在线| 亚洲视频第一页| 另类视频在线观看| 国产精品一区二区av影院萌芽| 久久国产精品影片| 亚洲成色www8888| 欧美日韩国产色视频| 欧美诱惑福利视频| 成人激情视频小说免费下载| 色狠狠av一区二区三区香蕉蜜桃| 亚洲欧美日韩精品久久| 成人免费高清完整版在线观看| 国产精品96久久久久久又黄又硬| 黑人与娇小精品av专区| 国产午夜精品免费一区二区三区| 国产精品久久一区| 亚洲老头同性xxxxx| 欧美大片在线看| 成人网在线视频| 久热精品视频在线观看| 精品国产一区av| 亚州成人av在线| 久久在线精品视频| 亚洲欧美日韩中文视频| 国产原创欧美精品| 国产97在线亚洲| 亚洲在线免费看| 欧美黑人性视频| 色午夜这里只有精品| 91久久久久久久一区二区| 播播国产欧美激情| 亚洲第一精品久久忘忧草社区| 亚洲3p在线观看| 亚洲精品电影网站| 精品一区二区三区四区在线| 亚洲综合色av| 日韩免费在线看| 国产欧美一区二区三区久久| 亚洲精品综合精品自拍| 欧美成人精品xxx| 国产午夜精品一区二区三区| 91精品国产91久久| 国产精品va在线播放我和闺蜜| 中文字幕日韩av电影| 色系列之999| 国产精品影院在线观看| 亚洲三级免费看| 亚洲成年人影院在线| 姬川优奈aav一区二区| 久久国产精品电影| 欧美大码xxxx| 久久伊人91精品综合网站| 亚洲爱爱爱爱爱| 欧美区在线播放| 精品中文字幕视频| 久久精品电影一区二区| 亚洲激情视频网站| 欧美放荡办公室videos4k| 亚洲国产日韩欧美在线99| 欧美精品videos| 亚洲欧美另类在线观看| 亚洲韩国日本中文字幕| 538国产精品一区二区免费视频| 久久成年人免费电影| 欧美一级片久久久久久久| 欧美成人性生活| 一区二区三区回区在观看免费视频| 欧美激情视频一区二区| 欧美性高跟鞋xxxxhd| 久久精品国产99国产精品澳门| 亚洲成色777777在线观看影院| 在线观看免费高清视频97| 国产精品精品一区二区三区午夜版| 亚洲精品www久久久久久广东| 欧美在线视频网| 欧美肥老妇视频| 欧美劲爆第一页| 中文字幕日韩高清| 欧美精品一区在线播放| 欧美激情视频网址| 国产精品pans私拍| 国产成人精品在线观看| 欧美日韩激情美女| 亚洲第一中文字幕| 国产一区二区三区毛片| 隔壁老王国产在线精品| 国产精品美女久久久久av超清| 91视频免费网站| 亚洲第一免费播放区| 日韩网站免费观看| 91tv亚洲精品香蕉国产一区7ujn| 国产欧美va欧美va香蕉在| 欧美激情精品久久久久| 日韩成人在线电影网| 国产精品久久久久久久午夜| 在线亚洲欧美视频| 亚洲成色www8888| 亚洲变态欧美另类捆绑| 欧美裸体xxxx极品少妇软件| 国产精品日韩电影| 美女视频久久黄| 色偷偷噜噜噜亚洲男人的天堂| 欧美性生交大片免网| 亚洲天天在线日亚洲洲精| 亚洲精品电影网在线观看| 91精品国产综合久久久久久蜜臀| 在线播放亚洲激情| 久久久久久久久亚洲| 91视频免费在线| 亚洲人成伊人成综合网久久久| 精品小视频在线| 中文字幕日韩精品在线| 国产成人黄色av| 久久久久亚洲精品成人网小说| 国产成人亚洲综合91|