这些模式中的任何一种都比其他模式效率更高或更低吗?
模式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
}
答案 0 :(得分:1)
有多个方法在类的外部和范围链上,而不是在类后面作为“命名空间”方法不能更好,imo。
出于以下几个原因,不喜欢模式#2:
话虽如此,从内存的角度来看 - 只是做一个测试,但我想说,模式1可能会有较小的开销,因为它在原型上定义一次,而不是在每个实例中单独定义。
答案 1 :(得分:1)
模式2将使用更多内存!这是prototypal inheritance
的基础知识为什么呢?在模式1中,jso
的每个实例都会将jsoInstanceX.hiliteField
引用到jso.prototype.hiliteField
。阅读:hiliteField
不是副本,只会存在jso.prototype
。
在模式2中,每次分配hiliteField.bind(this);
时都会创建一个函数包装器。附加内存不多,但速度也慢,特别是对类初始化的影响。