2016-07-05 41 views
0

嗨我試圖創建基於下劃線的擴展函數。我不知道如何做到這一點。我已經成功地創建了其他下劃線屬性的其他副本,但這只是沒有提出任何想法。我希望有人能夠解釋如何使用原生JavaScript創建._extend,以及它如何工作。這是起始幀。先謝謝了。學生試圖複製下劃線的擴展函數

var extend = function(obj){ 


} 
+0

當然,如果你已經複製,你可以讀取源代碼,並拿出T以下的特定問題的其他方法他還有*一些*想法它是如何工作的。這個問題對於這個網站來說太廣泛了,因爲它現在代表的是 – charlietfl

+1

Underscore的源代碼 - 也就是'extend'的實現 - [在GitHub上](https://github.com/jashkenas/underscore/blob/master/underscore .js文件)。請參閱第1061行的相關代碼。 –

回答

0

Object.keys(MyObj中)爲您提供包含所有鍵(屬性名)中你對象陣列。然後,只需要遍歷此數組,並根據密鑰名稱將源對象的值克隆到目標對象中。您可以克隆的對象重點是這樣的:

dest['someAttr'] = origin['someAttr']; 

假設origin.someAttr的值爲5。做好以上的「目標」的對象也應該有一個dest.someAttr與價值5

2

Underscore extend方法基本接受destinationsources兩個參數,並返回destination對象。要複製它的功能,一個簡單的Object.assign會做。

E.g.

var extendObject = function (destination, ...sources) { 
    return Object.assign(destination, ...sources); 
} 

如果您發現,上面的方法使用Rest parameter,僅由ES> = 2015如果您想爲ES的低版本的支持,你可以簡單地做,

var extendObject = function (destination, source) { 
    return Object.assign(destination, source); 
} 
支持

使用

var dest = {a: 1, b: 2}; 
var src1 = {c: 3, d: 4}; 
var src2 = {e: 5, f: 6}; 

// ES >= 2015 
extendObject(dest, src1); //{a: 1, b: 2, c: 3, d: 4} 
extendObject(dest, src1, src2); //{a: 1, b: 2, c: 3, d: 4, e: 5, f: 6} 

// ES <= 5 
extendObject(dest, src1); //{a: 1, b: 2, c: 3, d: 4} 
extendObject(dest, src2); //{a: 1, b: 2, c: 3, d: 4, e: 5, f: 6}