对象的内存效率

时间:2011-02-23 15:01:03

标签: javascript object mootools

这些模式中的任何一种都比其他模式效率更高或更低吗?

模式1:

var jso = new Class({
   initialize: function () {
     // code
   },
   hiliteField: function () {
     // code
   }
});

模式2:

var jso = new Class({
   initialize: function () {
     this.hiliteField = hiliteField.bind(this);
     // code  
   }
});
var hiliteField = function () {
  // code
}

2 个答案:

答案 0 :(得分:1)

有多个方法在类的外部和范围链上,而不是在类后面作为“命名空间”方法不能更好,imo。

出于以下几个原因,不喜欢模式#2:

  • 可管理性 - 必须将对每个外部函数的引用绑定到类中是很难的。
  • 可读性 - 必须指出哪个类正在被哪个类使用?
  • extendibility - 因为函数在jso类原型之外,扩展jso或将其用作mixin的类将无法访问外部方法。

话虽如此,从内存的角度来看 - 只是做一个测试,但我想说,模式1可能会有较小的开销,因为它在原型上定义一次,而不是在每个实例中单独定义。

答案 1 :(得分:1)

模式2将使用更多内存!这是prototypal inheritance

的基础知识

为什么呢?在模式1中,jso的每个实例都会将jsoInstanceX.hiliteField引用到jso.prototype.hiliteField。阅读:hiliteField不是副本,只会存在jso.prototype

在模式2中,每次分配hiliteField.bind(this);时都会创建一个函数包装器。附加内存不多,但速度也慢,特别是对类初始化的影响。