Javascript 作用域使用說(shuō)明
公用、受保護(hù)和私有作用域
在傳統(tǒng)的面向?qū)ο蟪绦蛟O(shè)計(jì)中,主要關(guān)注于公用和私有作用域。公用作用域中的對(duì)象屬性可以從對(duì)象外部訪問(wèn),即開(kāi)發(fā)者創(chuàng)建對(duì)象的實(shí)例后,就可使用它的公用屬性。而私有作用域中的屬性只能在對(duì)象內(nèi)部訪問(wèn),即對(duì)于外部世界來(lái)說(shuō),這些屬性并不存在。這也意味著如果類(lèi)定義了私有屬性和方法,則它的子類(lèi)也不能訪問(wèn)這些屬性和方法。
最近,另一種作用域流行起來(lái),即受保護(hù)作用域。雖然在不同語(yǔ)言中,受保護(hù)作用域的應(yīng)用的規(guī)則不同,但一般說(shuō)來(lái),它都用于定義私有的屬性和方法,只是這些屬性和方法還能被其子類(lèi)訪問(wèn)。
對(duì)ECMAScript討論這些作用域幾乎毫無(wú)意義,因?yàn)镋CMAScript中只存在一種作用域——公用作用域。ECMAScript中的所有對(duì)象的所有屬性和方法都是公用的。因此,定義自己的類(lèi)和對(duì)象時(shí),必須格外小心。記住,所有屬性和方法默認(rèn)都是公用的。
許多開(kāi)發(fā)者都在網(wǎng)上提出了有效的屬性作用域模式,解決了ECMAScript的這種問(wèn)題。由于缺少私有作用域,開(kāi)發(fā)者們制定了一個(gè)規(guī)約,說(shuō)明哪些屬性和方法應(yīng)該被看作私有的。這種規(guī)約規(guī)定在屬性名前后加下劃線。例如:
這段代碼中,屬性color是私有的。記住,這些下劃線并不改變這些屬性是公用屬性的事實(shí),它只是告訴其他開(kāi)發(fā)者,應(yīng)該把該屬性看作私有的。
有些開(kāi)發(fā)者還喜歡用單下劃線說(shuō)明私有成員,例如obj._color。
靜態(tài)作用域并非靜態(tài)的
靜態(tài)作用域定義的屬性和方法任何時(shí)候都能從同一個(gè)位置訪問(wèn)。在Java中,類(lèi)可具有靜態(tài)屬性和方法,無(wú)需實(shí)例化該類(lèi)的對(duì)象,即可訪問(wèn)這些屬性和方法,例如java.net.URLEncoder類(lèi),它的函數(shù)encode()即是靜態(tài)方法。
嚴(yán)格說(shuō)來(lái),ECMAScript并沒(méi)有靜態(tài)作用域。不過(guò),它可以給構(gòu)造函數(shù)提供屬性和方法。還記得嗎,構(gòu)造函數(shù)只是函數(shù)。函數(shù)是對(duì)象,對(duì)象可以有屬性和方法。例如:
這里,方法alternate()實(shí)際上是函數(shù)sayHi的方法??梢韵裾{(diào)用常規(guī)函數(shù)一樣調(diào)用sayHi()輸出"hi",也可以調(diào)用sayHi.alternate()輸出"hola"。即使如此,alternate()也是sayHi()公用作用域中的方法,而不是靜態(tài)方法。
- JavaScript詞法作用域與調(diào)用對(duì)象深入理解
- JavaScript中的作用域鏈和閉包
- javascript作用域容易記錯(cuò)的兩個(gè)地方分析
- 深入理解JavaScript系列(14) 作用域鏈介紹(Scope Chain)
- 淺談javascript中的作用域
- js變量以及其作用域詳解
- js使用函數(shù)綁定技術(shù)改變事件處理程序的作用域
- javascript權(quán)威指南 學(xué)習(xí)筆記之變量作用域分享
- javascript中的作用域scope介紹
- 關(guān)于JavaScript中var聲明變量作用域的推斷
- JavaScript.The.Good.Parts閱讀筆記(二)作用域&閉包&減緩全局空間污染
- JavaScript中實(shí)現(xiàn)塊作用域的方法
- Javascript 變量作用域 兩個(gè)可能會(huì)被忽略的小特性
- Javascript學(xué)習(xí)筆記3 作用域
- JavaScript的變量作用域深入理解
- JavaScript 變量作用域及閉包
- javascript 變量作用域 代碼分析
- javascript變量作用域使用中常見(jiàn)錯(cuò)誤總結(jié)
相關(guān)文章
KnockoutJS 3.X API 第四章之表單textInput、hasFocus、checked綁定
這篇文章主要介紹了KnockoutJS 3.X API 第四章之表單textInput、hasFocus、checked綁定的相關(guān)資料,需要的朋友可以參考下2016-10-10js實(shí)現(xiàn)文字在按鈕上滾動(dòng)的方法
這篇文章主要介紹了js實(shí)現(xiàn)文字在按鈕上滾動(dòng)的方法,涉及javascript動(dòng)態(tài)定時(shí)操作頁(yè)面元素樣式的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08基于JS2Image實(shí)現(xiàn)圣誕樹(shù)代碼
馬上圣誕節(jié)了,作為一名程序猿,如何體現(xiàn)自己獨(dú)特的過(guò)節(jié)風(fēng)格,如何在朋友圈發(fā)一張專(zhuān)屬自己的祝福照片我覺(jué)得很有必要,你們說(shuō)是不是2015-12-12JS實(shí)現(xiàn)的倒計(jì)時(shí)效果實(shí)例(2則實(shí)例)
這篇文章主要介紹了JS實(shí)現(xiàn)的倒計(jì)時(shí)效果,列舉了兩則JavaScript倒計(jì)時(shí)效果代碼供大家參考,原理基本相似,代碼簡(jiǎn)潔實(shí)用,需要的朋友可以參考下2015-12-12Web技術(shù)實(shí)現(xiàn)移動(dòng)監(jiān)測(cè)的介紹
移動(dòng)偵測(cè),一般也叫運(yùn)動(dòng)檢測(cè),常用于無(wú)人值守監(jiān)控錄像和自動(dòng)報(bào)警。通過(guò)攝像頭按照不同幀率采集得到的圖像會(huì)被 CPU 按照一定算法進(jìn)行計(jì)算和比較,當(dāng)畫(huà)面有變化時(shí),如有人走過(guò),鏡頭被移動(dòng),計(jì)算比較結(jié)果得出的數(shù)字會(huì)超過(guò)閾值并指示系統(tǒng)能自動(dòng)作出相應(yīng)的處理2017-09-09javascript腳本編程解決考試分?jǐn)?shù)統(tǒng)計(jì)問(wèn)題
該考試題目共有25道,每一道都是2選1的選擇題,總分是100分。那么javascript的代碼如下2008-10-10html頁(yè)面顯示年月日時(shí)分秒和星期幾的兩種方式
在html頁(yè)面中顯示時(shí)間是很常見(jiàn)的,實(shí)現(xiàn)的方法有很多,下面為大家簡(jiǎn)單介紹兩種方式,有需求的朋友可以參考下,希望對(duì)大家有所幫助2013-08-08淺談js中startsWith 函數(shù)不能在任何瀏覽器兼容的問(wèn)題
下面小編就為大家?guī)?lái)一篇淺談js中startsWith 函數(shù)不能在任何瀏覽器兼容的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03js動(dòng)態(tài)添加帶圓圈序號(hào)列表的實(shí)例代碼
這篇文章主要介紹了js動(dòng)態(tài)添加帶圓圈序號(hào)列表的實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02