我看到人們在創建javascript對象時採取兩種方法,他們有時會在主對象之外定義原型函數,有時他們會在內部執行它。在對象中定義原型函數具有使用私有變量和函數的優勢,在外部定義它的優點是什麼?在對象內部創建原型方法有什麼缺點?
function something (params) {
this.name = params.name;
this.color = params.color;
_someprivatefunction = function() {};
something.prototype.publicFunction = function() {_someprivatefunction() };
}
至於反對:
function something (params) {
this.name = params.name;
this.color = params.color;
_someprivatefunction = function() {};
}
something.prototype.publicFunction = function() {//can't call the private function here };
編輯:在樓下的意見建議,這是第三個選項(但現在這個問題是私有函數斜面訪問的任何私人的構造函數中的變量。)
(function() {
function something (params) {
this.name = params.name;
this.color = params.color;
}
_someprivatefunction = function() {};
something.prototype.publicFunction = function() {_someprivatefunction() };
}());
第一個看起來很奇怪的我。每次創建新實例時,都會在原型級別重新定義函數。這個函數只能訪問最後創建的實例的閉包變量(不管你通過哪個實例調用它)。 我在某種程度上錯了嗎? – 2014-10-20 04:25:04
@SteveJorgensen是的,第一個選項可能是由某個人編寫的不知道原型是什麼,並重新定義它,每個實例的創建都是毫無意義的。如果你需要訪問特定於實例的私有變量(特權函數)的功能,jsfriends解決方案(3rd)會更好。 – HMR 2014-10-20 07:13:14