當四處尋找模仿其他語言的私有方法,通常Crockford的頁面建議提出這個「priveleged」的方法:不是每個對象都重新創建的Javascript「priveleged」方法?
function Container(param) {
function dec() {
if (secret > 0) {
secret -= 1;
return true;
} else {
return false;
}
}
this.member = param;
var secret = 3;
var that = this;
this.service = function() {
return dec() ? that.member : null;
};
}
所以service
是priveleged - 它可以訪問私有方法(如dec
)和私有變量(如secret
)。我認爲它也可以調用「公共」方法(那些分配給Container.prototype
的方法)。
但是,是不是service
重新創建爲new Container
的每個對象?是否需要額外的時間並消耗額外的內存?而私人的dec
也是如此。
我瞭解,JS推薦的方式,使方法是KlassFunction.prototype
避免這種性能問題。但是,可以用這種方式創建非公共方法嗎?
你是絕對正確的。將它設置爲'prototype'將允許所有實例引用一個函數,而不是每個實例都重新創建它。但是就像你注意到的那樣,該方法將無法在構造函數中引用任何「私有」變量。這通常是一個權衡 – Ian
沒有理由期望,*碼*作私人用途是重新創建每個構造函數被調用時。運行時(可能)會創建一個新的Function實例,但現代實現將能夠共享代碼。除非你創建了數以百萬計的對象,否則我認爲內存使用不應該成爲大問題。 – Pointy