JavaScript 私有成员分析_javascript技巧
对象
JavaScript操作都是关于对象的。数组(Array)是对象,函数(Function)是对象。Object(类型)是对象。那么什么是对象呢?对象就是“名称-值”对(name-value)。名称是字符串,值可以是字符串、数值、布尔值或对象(包括数组和函数)。对象经常用哈希表实现,所以取值速度很快。
如果对象的一个值是函数(function),我们可以认为它是成员函数,当成员函数被调用时,this变量就会指向该对象。成员函数可以通过this变量访问对象的成员。
对象可以通过构造器(constructor)生成,构造器是个初始化对象的函数。构造器在这里扮演了其他语言中“类”扮演的角色,也提供了定义static变量和方法的手段。
Public成员
对象的所有成员都是公开成员,谁都可以读写甚至删除这些成员或添加新成员。添加新成员有两种方法:
在构造器里添加
这通常被用来初始化公开的成员变量。利用构造器的this变量来把成员添加到对象里。
function Container(param)
{ this.member = param;}
用下面这行代码生成一个对象实例
var myContainer = new Container('abc');
myContainer的member成员值为'abc'。
在原型中添加
这种方法经常用来添加公开成员函数。当Javascrīpt解释器遇到一个对象的成员,发现对象自身中并不存在这个成员时,就会到对象构造函数 的原型中去找。原型机制可以用来实现继承。它同样占用内存。如果想要给某个构造函数生成的所有对象都添加一个方 法,只要给对象的原型添加这个方法就可以了。
Container.prototype.stamp = function (string) { return this.member + string;}
这样就可以调用这个成员函数
myContainer.stamp('def')
返回值'abcdef'。
私有成员
私有成员是在构造器里产生的。var定义的变量和构造器的参数会成为私有成员。
function Container(param){
this.member = param;
var secret = 3;
var that = this;
}
这个构造器定义了三个私有变量:param,secret和self。它们属性对象Container,而对象外的代码或是对象的公开方法都无法访问它们。
只有私有方法可以访问。私有方法是构造器内定义的函数。
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 的值,如果它大于0就减少它的值然后返回true;否则它返回false。
它可以用于限制这个对象只能被使用3次。
根据协议,我们定义了一个私有变量that,用来让私有方法可以访问对象本身。
这是一个变通的解决方案,需要它的根本原因在于ECMAscrīpt语言规范的一个错误,而这个错误导致内部函数的this变量有
错误。(honker:似乎不用that也没关系,也许是原文写得太早了,哪位高人遇到过这种问题?)
私有方法不能被公开方法调用。为了让私有函数有用,我们需要引入特权方法的概念。
特权
特权方法可以访问私有变量和方法,并且它本身可以被公开方法和外部访问。可以删除或替换一个特权方法但是不能改变它或强迫它放弃自己的秘密。
特权方法是在构造函数通过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是一个特权方法。前三次调用myContainer.service()将返回'abc',之后它将返回null。service调用私有的dec方法,dec方法访问私有的secret变量。service对其他对象和函数都是可见的,但我们不能直接访问private成员。
闭包
因为有了闭包的我,这些公开、私有和特权方法的写法才成为可能。它意味着内部函数总能访问它外层函数定义的变量和参数。即使外层函数已经返回。这是Javascrīpt的一个极其强大的特性。目前还没有如何一本Javascrīpt编程的书讲到如何利用它,大多都没有提到它。
私有和特权成员只能在对象被构造时生成。公开成员可以在任何时间添加。
写法
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 (...) {...};
}

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數
