JavaScript对象的内存消耗

JavaScript对象的内存消耗,javascript,Javascript,有一些代码,我想知道,在这种情况下,内存经济会发生吗 var Person = { getName: function(){ return this.name; }, bigMethod: function(){ // here some large code } }; var createPerson = function(obj){ var person = {}; person.getName = function(){ re

有一些代码,我想知道,在这种情况下,内存经济会发生吗

var Person = {
  getName: function(){
    return this.name;
  },
  bigMethod: function(){
    // here some large code 
  }
};

var createPerson = function(obj){
  var person = {};      
  person.getName = function(){
    return Person.getName.call(obj); 
  };
  person.bigMethod =function(){
    return Person.bigMethod.call(obj);
  };
  return person;
}

var persons = [];

for (var i =0; i < 1000; i++){
  persons.push(createPerson({name:'Gregory'}));
}
var-Person={
getName:function(){
返回此.name;
},
bigMethod:function(){
//这里有一些大代码
}
};
var createPerson=函数(obj){
var person={};
person.getName=函数(){
返回Person.getName.call(obj);
};
person.bigMethod=函数(){
返回Person.bigMethod.call(obj);
};
返回人;
}
var人员=[];
对于(变量i=0;i<1000;i++){
push(createPerson({name:'Gregory'}));
}
或者原则上,我可以这样做:

var createPerson = function(obj){
    var person = {};      
    person.getName = function(){
      return obj.name; 
    };
    person.bigMethod = function(){
      // here some large code 
    };
    return person;
}

var persons = [];

for (var i =0; i < 1000; i++){
  persons.push(createPerson({name:'Gregory'}));
}
var createPerson=函数(obj){
var person={};
person.getName=函数(){
返回obj.name;
};
person.bigMethod=函数(){
//这里有一些大代码
};
返回人;
}
var人员=[];
对于(变量i=0;i<1000;i++){
push(createPerson({name:'Gregory'}));
}
在第一种情况下,我在一个单独的Person对象中移动了一个假设方法的实现,并在createPerson中调用它。
在第二种情况下,我只是使用必要的方法创建一个对象并返回该对象。

在这两种情况下,每次构造新对象时都会创建不必要的新函数。您可以使用
Person
对象作为中的原型。为什么不使用基于原型的“类”?这里只声明一次函数。在你的两个例子中,你都在为每个人创建新的功能。“内存经济发生”是什么意思?为什么需要这样绝对的“封装”?你真的有铁一般的理由“需要”这个吗?@Cfon是的,这是封装数据对象的正确方法,不,这不是内存友好型的(但对于仅仅1000个对象来说并不重要),而且不管你是将实现放在单独的对象中还是直接放在闭包中,都没有任何区别。