GRa*_*rdB 8 javascript oop performance closures
我对JavaScript很新,所以如果这是一个愚蠢的问题请耐心等待.
假设我有一个看起来像这样的"类":
var obj = function () {
var val;
return {
setVal: function(newVal) {
val = newVal;
},
getVal: function() {
return val;
}
};
};
Run Code Online (Sandbox Code Playgroud)
假设我的语法是正确的,这将定义一个具有名为"value"的"私有"属性的类,其中包含设置/获取属性的方法.现在,我将从这个类创建两个对象:
var myObj = obj();
var yourObj = obj();
Run Code Online (Sandbox Code Playgroud)
这是为每个对象创建一个单独的setVal()和getVal()方法吗?如果没有,为什么不呢?如果是这样,在构建高效的Web应用程序时这是一个严重问题吗?在大多数/所有情况下,关闭效率的权衡(如果有的话)是否值得?我笨吗?
谢谢,杰拉德
它在概念上确实是这样做的。然而,由于这是一种常见的模式,现代 JavaScript JITers 知道如何优化它,以便内存中只存储一份代码副本,并通过适当的指针重定向使其与相关闭包一起工作。
编辑:虽然我不太愿意通过源代码进行探索,但这里有一些基本的证据。下载 Chrome 开发通道版本,并在运行以下代码之前和之后拍摄堆快照:
var obj = /* as above */;
var objs = [];
for (var i = 0; i < 10000; ++i) {
objs.push(obj());
}
Run Code Online (Sandbox Code Playgroud)
然后对此代码执行相同操作:
function Obj() { }
Obj.prototype.setVal = function (value) { this._val = value; };
Obj.prototype.getVal = function () { return this._val; };
var objs = [];
for (var i = 0; i < 10000; ++i) {
objs.push(new Obj());
}
Run Code Online (Sandbox Code Playgroud)
您会发现堆快照在两种情况下都显示相同的“代码”数字,因此实际上正在执行我描述的优化。
| 归档时间: |
|
| 查看次数: |
381 次 |
| 最近记录: |