2013-02-19 53 views
0

我真的很喜歡在this articale中描述的JavaScript類繼承。 例如:如何在繼承的javascript類中聲明私有函數

var Person = Class.extend({ 

    init: function(isDancing){ 
    this.dancing = isDancing; 
    }, 
    dance: function(){ 
    return this.dancing; 
    } 

}); 

在這種情況下,舞蹈是公共職能。我想聲明私有函數「散步」。但是如何以及在哪裏? 我確信這對大多數人來說都很簡單。

謝謝。

+1

「私人」性質和原型繼承不很好地協同工作。 JS沒有私有屬性(尚未)的概念,所以不要嘗試使用這種語言,它並不意味着被使用。 – 2013-02-19 17:17:36

+0

John Resig的'Class'實現與jQuery完全無關! – Bergi 2013-02-19 17:34:34

+0

爲什麼要「散步」變得私密?私人到什麼?你能告訴我們你需要的是什麼,以及你想要給它打電話嗎? – Bergi 2013-02-19 17:37:02

回答

0

這是你可以做私人的功能,但你失去了能力的原型:

var Person = Class.extend((function() { 
    var dancing; 

    // private functions 
    function dance() { 
     return dancing; 
    } 

    // public functions 
    return { 
     init: function(isDancing) { 
      dancing = isDancing; 
     } 
    } 
}())); // <-- immediate invocation 
+2

我沒有仔細看看'Class'代碼,但我認爲所有的實例現在都會共享相同的'dancing'變量。 – 2013-02-19 17:20:29

+0

太棒了!我想我做了一個靜態私有變量:D – Halcyon 2013-02-19 17:21:35

+0

@Yoshi我可以,但我不想。額外的括號在那裏向讀者指出,我正在做20行直接調用。額外的括號是100%故意的。 – Halcyon 2013-02-19 17:23:47