JavaScript 是一種廣泛使用的程式語言,為開發人員提供了廣泛的功能來創建複雜而高效的應用程式。在物件導向程式設計中經常出現的一個面向是需要私有方法,這些方法只能在定義它們的類別中存取。
在 JavaScript 中,不支援傳統類,但 JavaScript可以使用物件來實現類似的功能。要在 JavaScript 中建立公共方法,通常會將它們定義為建構函數原型的屬性。例如,讓我們考慮下面的範例:
<code class="javascript">function Restaurant() {} Restaurant.prototype.buy_food = function() { // Something here } Restaurant.prototype.use_restroom = function() { // Something here }</code>
如您所見,可以使用restaurant.buy_food()和restaurant.use_restroom()正常存取和呼叫這些方法,其中restaurant是一個實例Restaurant 類別。
現在,讓我們專注於在 JavaScript 中建立私有方法的挑戰。私有方法是只能在同一類別中存取的方法。換句話說,我們想要定義一個名為 private_stuff 的方法,它可以被 buy_food 和 use_restroom 調用,但不能被該類別的使用者調用。
不幸的是,簡單地將一個方法宣告為原型的屬性是不行的。不要將其設為私有。 JavaScript 沒有對真正封裝的內建支持,這意味著物件的任何屬性(包括方法)都可以從外部存取。
但是,有一種解決方法可以有效地實現類似的結果。 JavaScript 的函數閉包可讓您在函數內建立私有作用域,從而使在該作用域內宣告的變數在該函數之外無法存取。
要使用此方法建立私有方法,您需要在函數內宣告該方法由建構函式呼叫。例如:
<code class="javascript">function Restaurant() { var myPrivateVar; var private_stuff = function() { // Only visible inside Restaurant() myPrivateVar = "I can set this here!"; } this.use_restroom = function() { // use_restroom is visible to all private_stuff(); } this.buy_food = function() { // buy_food is visible to all private_stuff(); } }</code>
在這種情況下,private_stuff 函數是在 Restaurant 建構函式中宣告的,這表示它只能在該建構函式的範圍內存取。現在,buy_food 和 use_restroom 都可以呼叫 private_stuff,因為它們可以透過建構函式內的共用範圍來存取它。但是,該類別的外部使用者無法呼叫 private_stuff,因為它沒有在原型中公開。
要注意的是,這種方法有一個限制:閉包中定義的私有方法不能成為類別原型的一部分。因此,無法在類別中使用 this 關鍵字存取它們。由於 JavaScript 閉包的工作方式,這種限制是不可避免的。
以上是如何在 JavaScript 中建立私有方法,這種方法有哪些限制?的詳細內容。更多資訊請關注PHP中文網其他相關文章!