Javascript 範圍使用說明

來源:互聯網
上載者:User

公用、受保護和私人範圍

在傳統的物件導向程式設計中,主要關注於公用和私人範圍。公用範圍中的對象屬性可以從對象外部存取,即開發人員建立對象的執行個體後,就可使用它的公用屬性。而私人範圍中的屬性只能在對象內部訪問,即對於外部世界來說,這些屬性並不存在。這也意味著如果類定義了私人屬性和方法,則它的子類也不能訪問這些屬性和方法。

最近,另一種範圍流行起來,即受保護範圍。雖然在不同語言中,受保護範圍的應用的規則不同,但一般說來,它都用於定義私人的屬性和方法,只是這些屬性和方法還能被其子類訪問。

對ECMAScript討論這些範圍幾乎毫無意義,因為ECMAScript中只存在一種範圍——公用範圍。ECMAScript中的所有對象的所有屬性和方法都是公用的。因此,定義自己的類和對象時,必須格外小心。記住,所有屬性和方法預設都是公用的。

許多開發人員都在網上提出了有效屬性範圍模式,解決了ECMAScript的這種問題。由於缺少私人範圍,開發人員們制定了一個規約,說明哪些屬性和方法應該被看作私人的。這種規約規定在屬性名稱前後加底線。例如:

這段代碼中,屬性color是私人的。記住,這些底線並不改變這些屬性是公用屬性的事實,它只是告訴其他開發人員,應該把該屬性看作私人的。

有些開發人員還喜歡用單底線說明私人成員,例如obj._color。

靜態範圍並非靜態

靜態範圍定義的屬性和方法任何時候都能從同一個位置訪問。在Java中,類可具有靜態屬性和方法,無需執行個體化該類的對象,即可訪問這些屬性和方法,例如java.net.URLEncoder類,它的函數encode()即是靜態方法。

嚴格說來,ECMAScript並沒有靜態範圍。不過,它可以給建構函式提供屬性和方法。還記得嗎,建構函式只是函數。函數是對象,對象可以有屬性和方法。例如:

這裡,方法alternate()實際上是函數sayHi的方法。可以像調用常規函數一樣調用sayHi()輸出"hi",也可以調用sayHi.alternate()輸出"hola"。即使如此,alternate()也是sayHi()公用範圍中的方法,而不是靜態方法。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.