我知道使用原型的一个结果是所有添加的属性和方法都将公开。这不是一个太大的问题,因为我使用命名约定来区分内部和公共接口。所以是的,一切仍然是在技术上公众。我应该在原型中添加* internal *属性吗?
难道是最好只加所有方法和属性的原型 - 甚至打算是内部的 - 而不是只增加公共方法/属性的原型,并动态地创建内部使用this.property = value
构造函数内的属性。
看起来,因为无论如何一切都将公开,所以我们不妨也为原型添加内部属性。
我知道使用闭包创建私人范围。我的问题不是关于如何创建真正的私有属性(这意味着抛弃原型,因为任何这些方法都不具有内部访问权限),而是关于使用原型时的最佳实践。
function MyObjectA() {
this.myInternalProp_ = 5;
// ...
}
MyObjectA.prototype.myPublicProp = "Hello";
与
function MyObjectA() {
// ...
}
MyObjectA.prototype.myPublicProp = "Hello";
MyObjectA.prototype.myInternalProp_ = 5;
你能提供一个代码示例? –
我没有看到问题是什么。你只是问你是否应该使用可用于信息隐藏的语言结构,或者如果你不应该? –
@RichardJPLeGuen问题是这样的。我们是否应该避免在构造函数中动态创建新属性。我应该把所有东西都放在原型上。这种方式不会动态创建属性;也就是在原型成型之后。例如,做这个。myNewProp = value'调用我的对象的引擎模型,并且它必须重建它的隐藏类。这不是我主要关心的问题,因为我很好奇人们对一致性和维护角度的看法。 – Peter