對(duì)象
Javascript 根本上是和對(duì)象相關(guān)的。數(shù)組是對(duì)象。函數(shù)是對(duì)象。對(duì)象是對(duì)象。那什么是對(duì)象呢?對(duì)象是名-值對(duì)的集合。名是字符串,值可以是字符串,數(shù)字,布爾值或者對(duì)象(包括數(shù)組和函數(shù))。通常對(duì)象是像哈希表一樣執(zhí)行地,這樣便于值地快速檢索。
如果值是函數(shù),我們可以認(rèn)為這是一個(gè)方法。當(dāng)一個(gè)對(duì)象地方法被調(diào)用的時(shí)候,this 變量就設(shè)置為這個(gè)對(duì)象。方法就可以通過 this 變量來訪問實(shí)例變量。
對(duì)象可以由用來初始化對(duì)象的構(gòu)造函數(shù)生成。構(gòu)造函數(shù)提供了其他語言中類所提供的特性,包括靜態(tài)變量和方法。
公共
對(duì)象的成員全部是公共成員。任何函數(shù)都可以訪問、修改或者刪除這些成員,或者增加新成員。有兩種向新對(duì)象中添加成員的方法:
在構(gòu)造函數(shù)中添加
這個(gè)技術(shù)通常用于初始化公共實(shí)例變量。使用構(gòu)造函數(shù)的 this 變量向?qū)ο笾刑砑映蓡T。
function Container(param){ this.member = param; }
這樣,如果我們創(chuàng)建一個(gè)新對(duì)象:
var myContainer = new Container('abc');
這樣 myContainer.member 就包含 ‘a(chǎn)bc’ 了。
在原型中添加
這個(gè)技術(shù)通常用于添加公共方法。當(dāng)一個(gè)成員被檢索并且沒能在對(duì)象本身里面找到時(shí),就要從對(duì)象的構(gòu)造函數(shù)的原型成員里面尋找。原型機(jī)制是用于繼承的。也用于節(jié)省內(nèi)存。向一個(gè)構(gòu)造函數(shù)生成的所有對(duì)象中添加一個(gè)方法,只需要向構(gòu)造函數(shù)原型中添加一個(gè)函數(shù):
Container.prototype.stamp = function(string){ return this.member + string; }
因此,我們可以調(diào)用這個(gè)方法:
myContainer.stamp('def')
結(jié)果為 ‘a(chǎn)bcdef’。
私有
私有成員是由構(gòu)造函數(shù)生成的。一般構(gòu)造函數(shù)的變量和參數(shù)都是私有成員。
function Container(param){ this.member = param; var secret = 3; var that = this; }
這個(gè)構(gòu)造函數(shù)生成了3個(gè)私有實(shí)例變量:param,secret 和 that。它們和對(duì)象相關(guān)聯(lián),但是它們不僅在函數(shù)外邊不可訪問,而且對(duì)對(duì)象自身的公共方法來說也是不可訪問的。它們只可以被私有方法訪問。私有方法是構(gòu)造函數(shù)的內(nèi)部函數(shù)。
function Container(param) { function dec() { if (secret > 0) { secret -= 1; return true; } else { return false; } } this.member = param; var secret = 3; var that = this; }
私有方法 dec 檢查 secret 實(shí)例變量。如果它大于零,將其減一并返回 true。否則返回 false。它可以用作限定對(duì)象使用3次。
按照習(xí)慣,我們?cè)O(shè)置了一個(gè)私有的 that 參數(shù)。它使得這個(gè)對(duì)象對(duì)于私有方法使可見的。在 ECMAScript 語言規(guī)范中,這是一個(gè)可行的錯(cuò)誤,它使得 this 對(duì)于內(nèi)部函數(shù)被不正確地設(shè)置。(This is a workaround for an error in the ECMAScript Language Specification which causes this to be set incorrectly for inner functions.)
私有方法不能被公共方法調(diào)用。要想使得私有方法有用,需要介紹一下特權(quán)方法。
出處:前端觀察
責(zé)任編輯:bluehearts
上一頁 下一頁 JavaScript的私有成員 [2]
◎進(jìn)入論壇網(wǎng)頁制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|