2016-07-05 6 views
0

Hallo Ich versuche, basierend auf Unterstreichung eine Erweiterungsfunktion zu erstellen. Ich habe keine Ahnung, wie ich das machen soll. Ich hatte Erfolg beim Erstellen anderer Replikate anderer Unterstreichungseigenschaften, aber dieses hier bringt keine Ideen in den Sinn. Ich hoffe, dass jemand erklären kann, wie man ._extend mit nativem Javascript erstellt und wie es funktioniert. Hier ist der Startrahmen. Danke im Voraus.Student versucht, die Funktion extension des Unterstrichs zu replizieren

var extend = function(obj){ 


} 
+0

Sicher, wenn Sie andere Methoden repliziert Sie den Quellcode lesen konnte und kommen mit spezielleren Frage als t seine sowie einige * Idee * wie es funktioniert. Diese Frage ist für diese Seite viel zu weit gefasst, da sie derzeit – charlietfl

+1

ist. Der Quellcode von Underscore - und damit die Implementierung von 'extend' - ist [auf GitHub] (https://github.com/jashkenas/underscore/blob/master/underscore) .js). Siehe Zeile 1061 für den entsprechenden Code. –

Antwort

0

Object.keys (myObj) gibt Ihnen ein Array mit allen Schlüsseln (Attributnamen) in Ihrem Objekt. Dann ist es nur eine Frage des Iterierens über dieses Array und des Klonens des Werts des Quellobjekts in das Zielobjekt basierend auf den Schlüsselnamen. Sie können einen Schlüssel Objekte wie dieses Klons:

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

der Wert origin.someAttr Angenommen ist 5. Nachdem die oben Ihre „dest“ Objekt tun sollte 5.

2
einen dest.someAttr mit dem Wert haben

Underscore extend Methode im Grunde akzeptiert zwei Parameter, die destination und sources sind, und das Objekt destination zurückgeben. Um seine Funktionalität zu replizieren, würde eine einfache Object.assign tun.

z.

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

Wenn Sie bemerken, verwendet das Verfahren oben Rest parameter, die nur von ES> = 2015 unterstützt wird Wenn Sie die untere Version von ES unterstützen möchten, können Sie einfach tun,

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

Nutzungs

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} 
Verwandte Themen