2013-03-28 28 views
0
var Foo = (function() { 

    var foo = function() { }; 

    var privateMethod = function(){ }; 

    foo.prototype = { 
     init: function() { 
      console.log(this.privateMethod); //undefined 
     } 
    }; 

    return foo; 

})(); 

我知道我可以直接訪問privateMethod而不使用this指針。但是因爲我來自C#世界,所以我想將其用於可讀性目的。在封閉中引用「私有方法」

有什麼辦法引用我的「私有方法」使用指針?

回答

2

你不能。您只能使用this來引用「公共」方法。如果你真的想使用something.method符號,你可以使用:

var Foo = (function() { 

    var foo = function() { }; 

    var private = { 
     privateMethod : function(){ }; 
    } 

    foo.prototype = { 
     init: function() { 
      console.log(private.privateMethod); 
     } 
    }; 

    return foo; 

})(); 
+0

好,將它任何意義使用'prototype'而不是創造「私人」的方法,即使我只使用它們的「類」裏面添加的所有FOO的方法? – Johan

+0

是的,這在原型繼承中是有意義的。請記住,原型中的屬性和方法是所有實例共享的(也就是說,沒有實例具有它們自己的副本)。如果你想在一個特定的實例上設置一些屬性值,你實際上會創建一個本地屬性,它會隱藏原型上的屬性 - 是的,這可能看起來很混亂......) – bfavaretto

+0

但是在這種情況下,我知道我只打算創建一個實例。對不起,應該提到這一點。將我的方法移至.prototype是否仍然是一個好主意? – Johan

2

privateMethod是不特定的foo每個實例。只是引用它,而不this.預選賽—雖然你可能要記錄一個函數調用的結果,而不是本身的功能:

console.log(privateMethod()); 
+0

的OP已經知道。問題是,如果可以使用'this'來引用「private」方法(通過變量關閉)。 – bfavaretto

+0

@bfavaretto - 的OP已經知道什麼? OP當然不知道簡單地消除'this.'。 –

+0

「我知道,我可以直接不使用該指針訪問privateMethod。但因爲我來自C#的世界,我想使用它的可讀性。」 – bfavaretto