今天我想到了一种高度灵活的访问数据集的方法,这些方法是使用闭包封装的。
我还在编写我的WebGL内容,所以我的结果示例与它相关(坐标/旋转状态)。然而,它很容易转移到其他环境。请看一下:
function RandomObject(x, y, z){
var rotX = 0;
var rotY = 0;
var rotZ = 0;
this.data = {
"position" : {
set: function(position){x = position[0]; y = position[1]; z = position[2];},
get: function(){return {"x": x, "y" : y, "z" : z};},
x: function(value){return value? (x = value) : x;},
y: function(value){return value? (y = value) : y;},
z: function(value){return value? (z = value) : z;},
readOnly: true
},
"rotation" : {
set: function(rotation){x = rotation[0]; y = rotation[1]; z = rotation[2];},
get: function(){return {"x": rotX, "y" : rotY, "z" : rotZ};},
x: function(value){return value? (rotX = value) : rotX;},
y: function(value){return value? (rotY = value) : rotY;},
z: function(value){return value? (rotZ = value) : rotZ;},
readOnly: false
}
};
}
我的目的是访问使用此构造函数生成的对象的数据,如下所示:
var set = "position";
var coordinate = "z";
object.data[set][coordinate](5);
readOnly只是用于检查用户是否应该能够修改这些值。是的,我可以重构那些return value? (x = value) : x;
行,但我认为没有其他功能它更具可读性。
第一个问题:你在使用它时发现了一些可能出错的东西吗?
第二个问题:你知道处理这种情况的更好方法吗?
第三个问题:性能如何,与普通标准的getter / setter相比,这需要更多的资源吗?你知道如何对此进行基准测试吗?
感谢阅读和您的建议。
澄清一下:我不想写世界上最快的JavaScript应用程序,但我只是不希望内存 leaks 麻烦出现,当我实例时......让我们说200左右这些物体中有300个。