我有我創建瞭如下一個基本庫:重寫toString方法 - 公共/私有訪問
(function() {
function Store() {
var store = [];
if (!(this instanceof Store)) {
return new Store();
}
this.add = function (name, price) {
store.push(new StoreItem(name, price));
return this;
};
}
function StoreItem(name, price) {
if (!(this instanceof StoreItem)) {
return new StoreItem();
}
this.Name = name || 'Default item';
this.Price = price || 0.0;
}
Store.prototype.toString = function() {
// build a formatted string here
};
StoreItem.prototype.toString = function() {
return this.Name + ' $' + this.Price;
};
window.shop = window.shop || {
Store: function() {
return new Store();
}
};
}());
絕大多數的這個效果很好!但是,我不想公開我在Store構造函數中定義的store
數組,因爲我不希望它在此庫的控件之外被修改。
但是,相反,我想重寫Store
的toString
方法使store
陣列中使用StoreItem
S的,所以我可以返回使用其toString
方法的所有StoreItem
s的格式化字符串。
E.g.如果store
被曝光後,toString
方法看起來是這樣的:
Store.prototype.toString = function() {
return this.store.join('\r\n');
};
// shop.Store().add('Bread', 2).add('Milk', 1.5).toString() result:
// Bread $2
// Milk $1.5
反正我能做到這一點沒有公開暴露我的store
陣列?
我沒有得到這個...什麼可以阻止我做這樣的事情:var bla = new Store(); bla.toString; < - 包含函數... – OddDev
@OddDev:那又如何?該函數不是'store'數組。 OP想要隱藏'store',而不是'toString'方法。 – Bergi
加1 - 這似乎是最簡單的方法。 – MrCode