Javascript 灵活访问封装数据对象的方法/如何分析性能?

Javascript 灵活访问封装数据对象的方法/如何分析性能?,javascript,performance,object,data-access,Javascript,Performance,Object,Data Access,今天,我想到了一种非常灵活的访问数据集的方法,这些数据集使用闭包进行封装 我还在写我的WebGL资料,所以我的示例与之相关(坐标/旋转状态)。然而,它很容易转移到其他上下文中。请看一下这个: function RandomObject(x, y, z){ var rotX = 0; var rotY = 0; var rotZ = 0; this.data = { "position" : { set: function(

今天,我想到了一种非常灵活的访问数据集的方法,这些数据集使用闭包进行封装

我还在写我的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);
只读功能只是用于检查用户是否能够修改这些值。是的,我可以重构那些
返回值?(x=值):x行,但我认为没有其他函数它更可读

第一个问题:您是否发现在使用此工具时可能出现严重错误

第二个问题:你知道更好的方法来处理这种情况吗

第三个问题:关于性能,与普通的标准getter/setter相比,这需要更多的资源吗?你知道如何进行基准测试吗

谢谢你的阅读和建议



为了澄清这一点:我不想编写世界上最快的JavaScript应用程序,但我只是不想在我的实例中出现内存泄漏问题。。让我们假设其中大约有200-300个对象。

是的,你真的应该重构它,因为有一点非常错误:你不能将你的值设置为
0
!如果a)你不关心
readOnly
b)你不做验证或其他事情c)你关心性能,那你为什么要使用getter/setter呢?谢谢你,Bergi,我知道我忘了一些重要的事情,哈哈。当然我会隐藏readOnly,太晚了,那只是在我打开这个问题之前的几个快速按键。在我看来,在编写大型面向对象应用程序时,封装是非常必要的。那段代码片段只是我心目中的一个通用框架,因此,如果没有任何验证,那么这段代码就没有任何生产性。出于动机,同时生成分离良好且高性能的代码是否属于犯罪行为DHm,我只是看不到您试图在这里使用getter/setter封装的
.data
对象的某些部分。它们对分离(无论什么)有什么好处?请澄清:内存泄漏与此无关。是的,如果您使用getter/setter(无论是本机的还是与方法一起使用),它将占用更多的内存(虽然足够少,可以忽略不计,尤其是当您仅实例化几百个对象时),但它们不会。