2017-01-17 53 views
0

如果我創建通過功能這樣的自定義對象:創建對象 - 內存使用

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

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

是如何運作的了內存明智? JavaScript是否爲我創建的每個對象保留doSomething方法的單獨副本?如果我需要創建數千個對象,那麼使用原型/組合會更有效率嗎?

+0

簡短的回答是肯定的:是 – charlietfl

+0

可能更容易從一個不同的觀點看:http://stackoverflow.com/a/41416177/1636522。 – leaf

回答

0

是的,一個新的對象將爲每個調用創建。

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

如果你想分享的方法,是的,更好的使用原型繼承。

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