Javascript 对象中的内存效率

Javascript 对象中的内存效率,javascript,object,mootools,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)

这两种模式中的一种比另一种效率高还是低

模式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
}

imo说,拥有多个在类外部和作用域链上游的方法,而不是在类后面作为“名称空间”方法,这是再好不过的了

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

  • 可管理性——必须将每个外部函数的引用绑定到类中是很难做到的
  • 可读性-必须指出哪个类将要作为任务使用哪个函数
  • 可扩展性——因为函数在jso类原型之外,所以扩展jso或将其用作mixin的类将无法访问外部方法

也就是说,从内存的角度来看,只需做一个测试,但我会说,模式1的开销可能更小,因为它在原型上定义了一次,而不是在每个实例中单独定义。

模式2将使用更多内存!这是最基本的

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


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

即使#2的内存占用较小,它也会被在每个类实例化上绑定所有这些函数的CPU使用量的增加所抵消。编辑:我猜这个评论应该出现在问题中,而不是这个答案:)检查链接,谢谢!这让我想到了这一点:,这让我更好地了解了如何现实地对概念进行基准测试。我喜欢讨论,但我认为他们倾向于在测试中使用不现实的简单对象。我可以使用我的实际对象重现测试,这些对象具有指数级的复杂性,并且具有特定于我的项目的真实基准。大家都有好时光。