如果我有三个对象的数组:
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];
答案 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看起来相同,它们没有任何共同之处)。
案例二 - 在这里你正在使用原型。属性和函数对于共享此原型的所有对象都是通用的。
案例三 - 您正在扩展您的对象,这意味着复制属性和引用。在你的情况下,你绝对不希望这样。虽然它可能是有用的,但你可能最终会创建内存泄漏,因为当你处理对象时 - 你必须分离所有对其他对象和函数的引用。
结论,使用原型在对象之间共享内容。