日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript中的私有成员

發布時間:2025/4/16 javascript 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript中的私有成员 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
JavaScript中的私有成員

Douglas Crockford www.crockford.com

翻譯:ShiningRay @ Nirvana Studio

JavaScript 是世界上最被誤解的語言。很多人認為它缺乏信息隱藏的特性所以對象不能有私有實例變量和方法。但這是一個誤解。JavaScript對象同樣可以擁有私有變量。下面就講解一下:

對象

JavaScript根本上都是關于的對象(Object)的。數組(Array)是對象,函數(Function)是對象,Object就不說 了。那什么是對象?對象是名稱-值的配對的集合。名稱是字符串,值可以是字符串、數字、布爾值和對象(包括數組和函數)。對象常常實現為哈希表以快速存取 值。

如果一個值是函數,我們可以將它視為方法method。當調用一個對象的方法時,this 變量就會被設為該對象。這個方法就可以通過this變量訪問實例變量。

對象是由構造器constructor產生的,它是初始化對象的函數。構造器提供了其它語言中類提供的特性,包括靜態方法和變量。

公共成員

對象的成員都是 public 公共成員。任何函數都可以訪問、修改或者刪除這些成員。有兩種主要的途徑給新的對象加入成員:

構造器中

這個技術一般用來初始化公共實例變量。構造器的this變量是用來向對象添加成員的。

function Container(param) { this.member = param;}

這樣,如果我們構造一個新的對象

var myContainer = new Container('abc');

那么myContainer.member 就會包含'abc'。

原型中

這個技巧一般用來添加公共方法。當一個成員被檢索且沒有在對象中發現的時候,那么它就會從對象構造器的 prototype 成員中去獲取它。這個原型機制可用來實現繼承。它也可以節省內存。要為一個構造器生成的所有對象加入一個方法,將函數加入構造器的prototype 中:

Container.prototype.stamp = function (string) {return this.member + string; }

這樣,我們可以調用這個方法

myContainer.stamp('def')

它會返回'abcdef'.

私有成員

私有Private成員要由構造器生成。構造器中的普通的var變量和參數都成為私有成員。

function Container(param) {this.member = param;var secret = 3;var self = this;}

這個構造器有三個私有實例變量:param, secret, 和 self。它們被附加到了對象上,但它們無法從外部訪問,同時它們也無法被這個對象的公共方法所訪問。他們只對私有成員可見。私有方法則是構造器內部的函數。

function Container(param) {function dec() {if (secret > 0) {secret -= 1;return true;} else {return false;}}this.member = param;var secret = 3;var self = this; }

私有方法 dec 檢查 secret 實例變量。如果它大于0,就減少secret 的大小并返回 true 。否則它返回 false 。這個可以限制對象使用三次。

按照慣例,我們給出一個私有的 self 參數。這個可以令對象對私有方法可見。這種做法是因為ECMAScript Language Specification中的一個錯誤,這個錯誤令 this 不能正確地對內部函數設置。

私有方法無法被公共方法調用。要令私有方法有用,我們需要引入一種特權方法。

特權成員

一個特權A privileged 方法可以訪問私有的變量和方法,同時它對公共域可見。也可以刪除或替換一個特權方法,但不能改變它。

特權方法是用 this 在構造器中分配的。

function Container(param) {function dec() {if (secret > 0) {secret -= 1;return true;} else {return false;}}this.member = param;var secret = 3;var self = this;this.service = function () {if (dec()) {return self.member;} else {return null;}}; }

service 就是一個特權方法。前三次調用會返回'abc'。
之后 ,它會返回 null。service調用的私有的 dec 方法,而
dec又訪問了私有的 secret變量。service對其它的對象和方法是可見的,但不能直接訪問私有成員。

閉包

這種公共、私有和特權成員的模式是可行的原因是由于JavaScript有 closure閉包。這個意味著一個內部的函數總是可以訪問這個函數外部的變量和參數,甚至在外部的函數返回之后。這是這個語言的一個極其強大的特性。目前沒有哪本關于JavaScript編程的書展示了如何發掘這個特性。大多數都沒有提到。

私有和特權成員只能在對象構造的時候生成。公共成員可以在任意時刻添加。

模式

公共(Public)

function Constructor(...) {this.membername = value; } Constructor.prototype.membername = value;

私有(Private)

function Constructor(...) { var self = this;var membername = value; function membername(...) {...} }

注意,實際上函數語句

function membername(...) {...}

是以下語句的縮寫,兩者相同:

var membername = function membername(...) {...};

特權(Privileged)

function Constructor(...) { this.membername = function (...) {...}; }

Copyright 2001 Douglas Crockford. All Rights Reserved Wrrrldwide.

posted on 2012-11-07 16:23 xliujingweix 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/xliujingweix/archive/2012/11/07/2759044.html

總結

以上是生活随笔為你收集整理的JavaScript中的私有成员的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99国产精品久久久久久久成人热 | 熟女俱乐部五十路六十路av | 黄色小说在线看 | 深夜福利免费视频 | 波多野结衣不卡视频 | 一个人看的视频www 色就是色网站 | 国产高清中文字幕 | 色国产视频 | 亚洲AV成人无码精品久久盆瓶 | 欧美久久久久久 | 大片av| 精品一区二区在线观看视频 | 国产精品69久久久久孕妇欧美 | 丁香综合网 | 超碰在线免费播放 | 中文字幕在线字幕中文 | 娇妻玩4p被三个男人伺候电影 | 欧美wwwxxxx | 日韩乱码人妻无码系列中文字幕 | 毛片视频网站在线观看 | 91传媒在线免费观看 | 亚洲成人777| 在线观看黄色片 | 波多野结衣av在线观看 | 狠狠操在线| 久久久精品免费视频 | 午夜激情在线视频 | 九七av| 在线观看亚洲视频 | 亚洲一区二区不卡视频 | 日本亚洲欧洲色 | 荫蒂被男人添免费视频 | 99亚洲视频 | 日韩电影一区二区三区 | 成人性生生活性生交全黄 | 三级黄色av| 日本不卡二区 | 亚洲一区二区三区四区视频 | 亚洲看看 | 亚洲av无一区二区三区久久 | 视频一区免费 | 日韩av在线高清 | 青青久久久 | 国产一级片一区 | 66精品| 国产一区在线看 | 欧美做受69 | 欧美日韩一区二 | 亚洲制服在线观看 | 亚洲91视频 | 伊人二区 | 久久xx| 欧美色综合天天久久综合精品 | 激情久久av一区av二区av三区 | 欧美视频一二三区 | 名人明星三级videos | 欧美伊人 | 又色又爽又高潮免费视频国产 | 成人区一区二区 | 日本人jizz | 亚洲作爱 | 影音先锋制服丝袜 | 亚洲男人的天堂在线视频 | 国产色视频 | youjizz亚洲| 久久亚洲天堂网 | 一区二区三区av | 无码人妻aⅴ一区二区三区 国产高清一区二区三区四区 | 男女激情免费网站 | 欧美精品一区二区三区久久久 | 日韩123| 国产白丝av | 影音先锋成人资源网 | 欧美激情视频在线 | 国产精品999久久久 在线青草 | 成人免费无码大片a毛片抽搐色欲 | 久久久久久av无码免费看大片 | 久久久精品小视频 | 一区高清| 美国黄色一级毛片 | xxxxx国产 | 精品无码久久久久久久久成人 | 牛牛精品一区 | 蜜桃视频无码区在线观看 | 狠狠操狠狠操狠狠操 | 欧美一区二区日韩一区二区 | 欧美在线免费观看视频 | 三上悠亚在线一区 | 亚洲欧美日韩一区 | 亚洲短视频 | 亚洲AV无码成人精品区明星换面 | 亚瑟av | 日韩精品色哟哟 | 又大又粗又爽18禁免费看 | 四虎成人精品永久免费av | 六月丁香激情 | 特黄aaaaaaaaa毛片免费视频 | 黄色aa毛片 | 欧美精品久久久久久久久老牛影院 |