我知道使用原型的一個結果是所有添加的屬性和方法都將公開。這不是一個太大的問題,因爲我使用命名約定來區分內部和公共接口。所以是的,一切仍然是在技術上公衆。我應該在原型中添加* 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