JavaScript对象的内存使用情况

时间:2014-06-09 12:49:34

标签: javascript arrays memory

如果我有三个对象的数组:

var array = [obj1, obj2, obj3];

我的对象有一个特定属性(例如:" id")和两个常见属性(例如:" prop"和" log"函数)..

我想知道哪一个内存使用最少?什么更好用?

在我的数组的所有项目上定义相同的属性:

var obj1 = {id: 1, prop: '@', log: function() { console.log('TEST'); }};
var obj2 = {id: 2, prop: '@', log: function() { console.log('TEST'); }};
var obj3 = {id: 3, prop: '@', log: function() { console.log('TEST'); }};

var array = [obj1, obj2, obj3];

VS

使用给定的原型创建对象(我的数组的项目)

var myProto = {prop: '@', log: function() { console.log('TEST'); }};

var obj1 = Object.create(myProto);
obj1.id = 1;

var obj2 = Object.create(myProto);
obj2.id = 2;

var obj3 = Object.create(myProto);
obj3.id = 3;

var array = [obj1, obj2, obj3];

VS

使用公共属性创建对象并扩展我的数组项以使用此对象

var common = {prop: '@', log: function() { console.log('TEST'); }};

var obj1 = extend({id: 1}, common);
var obj2 = extend({id: 2}, common);
var obj3 = extend({id: 3}, common);

var array = [obj1, obj2, obj3];

2 个答案:

答案 0 :(得分:1)

从内存的角度来看,使用原型会更有效率。其次,既然你想在每个新对象中初始化一个属性,你可能会有构造函数的情况。

function Foo(id) {
    this.id = id || null;
}

Foo.prototype = {

    id: null,

    prop: "@",

    constructor: Foo,

    log: function() {
        console.log("TEST");
    }

};

var array = [
    new Foo(1),
    new Foo(2),
    new Foo(3)
];

答案 1 :(得分:0)

案例一 - 您正在创建具有不同属性的3个单独对象(而prop和log看起来相同,它们没有任何共同之处)。

案例二 - 在这里你正在使用原型。属性和函数对于共享此原型的所有对象都是通用的。

案例三 - 您正在扩展您的对象,这意味着复制属性和引用。在你的情况下,你绝对不希望这样。虽然它可能是有用的,但你可能最终会创建内存泄漏,因为当你处理对象时 - 你必须分离所有对其他对象和函数的引用。

结论,使用原型在对象之间共享内容。