嗨我試圖創建基於下劃線的擴展函數。我不知道如何做到這一點。我已經成功地創建了其他下劃線屬性的其他副本,但這只是沒有提出任何想法。我希望有人能夠解釋如何使用原生JavaScript創建._extend,以及它如何工作。這是起始幀。先謝謝了。學生試圖複製下劃線的擴展函數
var extend = function(obj){
}
嗨我試圖創建基於下劃線的擴展函數。我不知道如何做到這一點。我已經成功地創建了其他下劃線屬性的其他副本,但這只是沒有提出任何想法。我希望有人能夠解釋如何使用原生JavaScript創建._extend,以及它如何工作。這是起始幀。先謝謝了。學生試圖複製下劃線的擴展函數
var extend = function(obj){
}
Object.keys(MyObj中)爲您提供包含所有鍵(屬性名)中你對象陣列。然後,只需要遍歷此數組,並根據密鑰名稱將源對象的值克隆到目標對象中。您可以克隆的對象重點是這樣的:
dest['someAttr'] = origin['someAttr'];
假設origin.someAttr的值爲5。做好以上的「目標」的對象也應該有一個dest.someAttr與價值5
Underscore extend方法基本接受destination
和sources
兩個參數,並返回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}
當然,如果你已經複製,你可以讀取源代碼,並拿出T以下的特定問題的其他方法他還有*一些*想法它是如何工作的。這個問題對於這個網站來說太廣泛了,因爲它現在代表的是 – charlietfl
Underscore的源代碼 - 也就是'extend'的實現 - [在GitHub上](https://github.com/jashkenas/underscore/blob/master/underscore .js文件)。請參閱第1061行的相關代碼。 –