2012-03-29 113 views
0

下面是核心javascript中的擴展函數。它與jQuery中的$ .extend()相同。它用於更新/修改JavaScript對象。javascript中的擴展函數的使用

var extend= function() { 
      var options, 
      name, 
      src, 
      copy, 
      copyIsArray, 
      clone, 
      target = arguments[0] || {}, 
      i = 1, 
      length = arguments.length, 
      deep = false; 

      if (typeof target === "boolean") { 
       deep = target; 
       target = arguments[1] || {}; 
       i = 2; 
      } 

      if (typeof target !== "object" && !isFunction(target)) { 
       target = {}; 
      } 

      if (length === i) { 
       target = this; 
       --i; 
      } 

      for (; i < length; i++) { 
       if ((options = arguments[i]) != null) { 
        for (name in options) { 
         src = target[name]; 
         copy = options[name]; 

         if (target === copy) { 
          continue; 
         } 

         if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) { 
          if (copyIsArray) { 
           copyIsArray = false; 
           clone = src && isArray(src) ? src: []; 

          } else { 
           clone = src && isPlainObject(src) ? src: {}; 
          } 

          target[name] = extend(deep, clone, copy); 

         } else if (copy !== undefined) { 
          target[name] = copy; 
         } 
        } 
       } 
      } 
      return target; 
     } 

它被稱爲如下:

extend(curConfig, newConfig); 

因爲它是用來到處修改與新對象的標準功能。我想了解和分析這個功能。

  1. 由於函數定義不顯示任何參數可以傳遞,但在使用它時可以使用任意數量的參數。那麼,這個函數的行爲如何?
  2. 此功能有什麼不同用途。有什麼方法可以調用它?
  3. 如果5個對象參數傳遞給函數,則第一個參數將是目標,剩餘的將是源。對 ?如果對象被覆蓋或複製,如果不存在?

任何人都可以用示例解釋(或者如果可能的話用jsfiddle演示)?

在此先感謝!

回答

1

由於函數定義不顯示任何參數可以傳遞,但在使用它時可以使用任意數量的參數。那麼,這個函數的行爲如何?

它使用arguments object

什麼是調用它的方法?

您傳遞一個對象來擴展和任意數量的對象來擴展它。

+0

+1。感謝昆汀。 「你傳遞一個對象來擴展和任意數量的對象來擴展它」你能說一點嗎?請。看我的問題3 – 2012-03-29 06:01:31