天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

JavaScript 私有成員分析

對(duì)象
JavaScript操作都是關(guān)于對(duì)象的。數(shù)組(Array)是對(duì)象,函數(shù)(Function)是對(duì)象。Object(類型)是對(duì)象。那么什么是對(duì)象呢?對(duì)象就是“名稱-值”對(duì)(name-value)。名稱是字符串,值可以是字符串、數(shù)值、布爾值或?qū)ο螅ò〝?shù)組和函數(shù))。對(duì)象經(jīng)常用哈希表實(shí)現(xiàn),所以取值速度很快。
如果對(duì)象的一個(gè)值是函數(shù)(function),我們可以認(rèn)為它是成員函數(shù),當(dāng)成員函數(shù)被調(diào)用時(shí),this變量就會(huì)指向該對(duì)象。成員函數(shù)可以通過this變量訪問對(duì)象的成員。
對(duì)象可以通過構(gòu)造器(constructor)生成,構(gòu)造器是個(gè)初始化對(duì)象的函數(shù)。構(gòu)造器在這里扮演了其他語言中“類”扮演的角色,也提供了定義static變量和方法的手段。
Public成員
對(duì)象的所有成員都是公開成員,誰都可以讀寫甚至刪除這些成員或添加新成員。添加新成員有兩種方法:
在構(gòu)造器里添加
這通常被用來初始化公開的成員變量。利用構(gòu)造器的this變量來把成員添加到對(duì)象里。
function Container(param)
{ this.member = param;}
用下面這行代碼生成一個(gè)對(duì)象實(shí)例
var myContainer = new Container('abc');
myContainer的member成員值為'abc'。
在原型中添加
這種方法經(jīng)常用來添加公開成員函數(shù)。當(dāng)Javascrīpt解釋器遇到一個(gè)對(duì)象的成員,發(fā)現(xiàn)對(duì)象自身中并不存在這個(gè)成員時(shí),就會(huì)到對(duì)象構(gòu)造函數(shù) 的原型中去找。原型機(jī)制可以用來實(shí)現(xiàn)繼承。它同樣占用內(nèi)存。如果想要給某個(gè)構(gòu)造函數(shù)生成的所有對(duì)象都添加一個(gè)方 法,只要給對(duì)象的原型添加這個(gè)方法就可以了。
Container.prototype.stamp = function (string) { return this.member + string;}
這樣就可以調(diào)用這個(gè)成員函數(shù)
myContainer.stamp('def')
返回值'abcdef'。
私有成員
私有成員是在構(gòu)造器里產(chǎn)生的。var定義的變量和構(gòu)造器的參數(shù)會(huì)成為私有成員。
function Container(param){
this.member = param;
var secret = 3;
var that = this;
}
這個(gè)構(gòu)造器定義了三個(gè)私有變量:param,secret和self。它們屬性對(duì)象Container,而對(duì)象外的代碼或是對(duì)象的公開方法都無法訪問它們。
只有私有方法可以訪問。私有方法是構(gòu)造器內(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 檢查實(shí)例變量 secret 的值,如果它大于0就減少它的值然后返回true;否則它返回false。
它可以用于限制這個(gè)對(duì)象只能被使用3次。
根據(jù)協(xié)議,我們定義了一個(gè)私有變量that,用來讓私有方法可以訪問對(duì)象本身。
這是一個(gè)變通的解決方案,需要它的根本原因在于ECMAscrīpt語言規(guī)范的一個(gè)錯(cuò)誤,而這個(gè)錯(cuò)誤導(dǎo)致內(nèi)部函數(shù)的this變量有
錯(cuò)誤。(honker:似乎不用that也沒關(guān)系,也許是原文寫得太早了,哪位高人遇到過這種問題?)
私有方法不能被公開方法調(diào)用。為了讓私有函數(shù)有用,我們需要引入特權(quán)方法的概念。
特權(quán)
特權(quán)方法可以訪問私有變量和方法,并且它本身可以被公開方法和外部訪問。可以刪除或替換一個(gè)特權(quán)方法但是不能改變它或強(qiáng)迫它放棄自己的秘密。
特權(quán)方法是在構(gòu)造函數(shù)通過this定義的
function Container(param) {
function dec() {
if (secret > 0) {
secret -= 1;
return true;
} else {
return false;
} }
this.member = param;
var secret = 3;
var that = this;
this.service = function () {
if (dec()) {
return that.member;
} else {
return null;
} };}
service是一個(gè)特權(quán)方法。前三次調(diào)用myContainer.service()將返回'abc',之后它將返回null。service調(diào)用私有的dec方法,dec方法訪問私有的secret變量。service對(duì)其他對(duì)象和函數(shù)都是可見的,但我們不能直接訪問private成員。
閉包
因?yàn)橛辛碎]包的我,這些公開、私有和特權(quán)方法的寫法才成為可能。它意味著內(nèi)部函數(shù)總能訪問它外層函數(shù)定義的變量和參數(shù)。即使外層函數(shù)已經(jīng)返回。這是Javascrīpt的一個(gè)極其強(qiáng)大的特性。目前還沒有如何一本Javascrīpt編程的書講到如何利用它,大多都沒有提到它。
私有和特權(quán)成員只能在對(duì)象被構(gòu)造時(shí)生成。公開成員可以在任何時(shí)間添加。
寫法
Public
function Constructor(...) {
this.membername = value;
}
Constructor.prototype.membername = value;
Private
function Constructor(...) {
var that = this;
var membername = value;
function membername(...) {...}
}
Note: The function statement
function membername(...) {...}
is shorthand for
var membername = function membername(...) {...};
Privileged
function Constructor(...) {
this.membername = function (...) {...};
}

JavaScript技術(shù)JavaScript 私有成員分析,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 欧美精品成人久久网站 | 好男人在线高清WWW免费观看 | YELLOW视频在线观看最新 | 国产做国产爱免费视频 | 亚洲精品国偷拍自产在线 | 一区二区不卡在线视频 | 国产精品第十页 | 秋霞电影院兔费理论观频84mb | 国产精品一久久香蕉国产线看 | 妈妈的职业3完整版在线播放 | 极品少妇粉嫩小泬啪啪AV | 久久中文字幕人妻熟AV女蜜柚M | 久久国产加勒比精品无码 | 午夜国产理论 | 女仆翻身大作战 | 伊人久久大香线蕉综合bd高清 | u15女少天堂写真 | 亚洲国产精品天堂在线播放 | 蜜臀AV99无码精品国产专区 | 调教椅上的调教SM总裁被调教 | 国产成人精视频在线观看免费 | 欧美精品成人一区二区在线观看 | 国产精品一国产精品免费 | 国产亚洲精品在浅麻豆 | 手机在线观看你懂的 | 日日摸夜夜添夜夜爽出水 | 在线视频久久只有精品第一日韩 | 武侠古典久久亚洲精品 | 夜夜草导航 | 国产精品女上位好爽在线短片 | 色久久综合视频本道88 | 国产精品99久久久久久WWW | 我把寡妇日出水好爽 | 青青草AV国产精品 | 中文字幕一区二区三区在线播放 | 亚久久伊人精品青青草原2020 | 天天躁日日躁狠狠躁AV麻豆 | 国产99久9在线 | 国产精品久久久久影院嫩草 | 牛牛在线视频 | 脱jk裙的美女露小内内无遮挡 |