在 JavaScript 中,对象的字段总是“公共的”:
function Test() {
this.x_ = 15;
}
Test.prototype = {
getPublicX: function() {
return this.x_;
}
};
new Test().getPublicX(); // using the getter
new Test().x_; // bypassing the getter
但是您可以通过使用局部变量并使用闭包作为吸气剂来模拟“私有”字段:
function Test() {
var x = 15;
this.getPrivateX = function() {
return x;
};
}
new Test().getPrivateX(); // using the getter
// ... no way to access x directly: it's a local variable out of scope
一个区别是,对于“公共”方法,每个实例的 getter 都是同一个函数对象:
console.assert(t1.getPublicX === t2.getPublicX);
而对于“私有”方法,每个实例的 getter 都是一个不同的函数对象:
console.assert(t1.getPrivateX != t2.getPrivateX);
我很好奇这种方法的内存使用情况。由于每个实例都有一个单独getPrivateX
的 ,如果我创建 10k 个实例,这会导致巨大的内存开销吗?
创建具有私有和公共成员的类实例的性能测试: