2017-01-17 2 views
0

Wenn ich benutzerdefinierte Objekte durch Funktionen wie folgt zu erstellen:Erstellen von Objekten durch Funktionen - Speichernutzung

function createCustomObject (state) { 
    let obj = { state }; 
    obj.doSomething = function () { 
     // do something 
    }; 
    return obj; 
} 

let myNewObject = createCustomObject({ foo: 'bar' }); 
myNewObject.doSomething(); 

Wie das Gedächtnis weise nicht klappt? Enthält JavaScript für jedes der von mir erstellten Objekte eine separate Kopie der Methode doSomething? Wenn ich Tausende von Objekten erstellen muss, werden Prototypen/Komposition effizienter sein?

+0

kurze Antwort ist Ja & Ja – charlietfl

+0

Es kann einfacher sein, aus einem anderen Blickwinkel zu sehen: http://stackoverflow.com/a/41416177/1636522. – leaf

Antwort

0

Ja, ein neues Objekt wird für jeden Anruf erstellt.

function createCustomObject (state) { 
 
    let obj = { state }; 
 
    obj.doSomething = function() {}; 
 
    return obj; 
 
} 
 
var o1 = createCustomObject(); 
 
var o2 = createCustomObject(); 
 
console.log(o1 === o2); // false 
 
console.log(o1.doSomething === o2.doSomething); // false

Wenn Sie die Methoden teilen, ja, besser prototypische Vererbung.

function CustomObject (state) { 
 
    this.state = state; 
 
} 
 
CustomObject.prototype.doSomething = function() {}; 
 
var o1 = new CustomObject(); 
 
var o2 = new CustomObject(); 
 
console.log(o1 === o2); // false 
 
console.log(o1.doSomething === o2.doSomething); // true