javascript object oriented 面向?qū)ο缶幊坛醪絖基礎(chǔ)知識(shí)
May 16, 2016 pm 07:21 PM用?new?Object()?來創(chuàng)建對(duì)象
在javascript里有幾種創(chuàng)建對(duì)象的方法,在不同的場(chǎng)合可用不同的方法.最簡(jiǎn)單的就是用?new?操作符,例如:
我們?cè)谶@個(gè)例子里定義了person這個(gè)對(duì)象,然后加入了它的屬性和方法.在這個(gè)例子里,自定義的方法里有兩個(gè)屬性.
用文字記號(hào)Literal?Notation創(chuàng)建對(duì)象
用文字記號(hào)也可以創(chuàng)建對(duì)象,但要javascript?1.2以上版本.它的創(chuàng)建形式是多樣的.
文字記號(hào)可是是數(shù)組,也可以是任意的javascript表達(dá)式或值.
用?new?操作符或文字記號(hào)創(chuàng)建一個(gè)自定義對(duì)象都是簡(jiǎn)單的,也是符合邏輯的.但它最大的缺點(diǎn)就是結(jié)果不可復(fù)用.也不能很容易的用不同的版本初始化創(chuàng)建對(duì)象.例如上面?的第一個(gè)例子,如果?person?的?name?不是?"Tim?Scarfe",那樣我們不得不重新定義整個(gè)對(duì)象,僅僅為了適應(yīng)它的一點(diǎn)點(diǎn)改變.
對(duì)象的構(gòu)造和原型
????在OOP的世界里,用先前的方法定義對(duì)象在許多場(chǎng)合都有限制.我們需要一種創(chuàng)建對(duì)象的方法,類型可以被多次使用而不用重新定義.對(duì)象在實(shí)例化時(shí)每次都可以按需分配不同的值.實(shí)現(xiàn)這個(gè)目標(biāo)的標(biāo)準(zhǔn)方法是用對(duì)象構(gòu)造器函數(shù).
???一個(gè)對(duì)象構(gòu)造器只不過是個(gè)有規(guī)則的javascript函數(shù),它就象一個(gè)容器(定義參數(shù),調(diào)用其他函數(shù)等等).它們兩者所不同的是構(gòu)造器函數(shù)是由?new?操作符調(diào)用的.(你將在下面的例子中看到).基于函數(shù)語法形式的對(duì)象定義,我們可以使它工作得最好.
讓我們用現(xiàn)實(shí)世界中的貓來舉個(gè)例子.貓的?name?和?color?是貓的屬性.meeyow(貓叫)是它的一個(gè)方法.重要的是任何不同的貓都可能有不同的?name?和?meeyow?的叫聲.為了建立適應(yīng)這些特征的對(duì)象類,我們將使用對(duì)象構(gòu)造器.?
在這里,函數(shù)?cat()?是一個(gè)對(duì)象構(gòu)造器,它的屬性和方法在函數(shù)體里用this來定義,用對(duì)象構(gòu)造器定義的對(duì)象用?new?來實(shí)例化.主意我們?nèi)绾畏浅H菀椎亩x多個(gè)cat?的實(shí)例.每一個(gè)都有自己的名字,這就是對(duì)象構(gòu)造器帶給我們的靈活性.
構(gòu)造器建立了對(duì)象的藍(lán)圖.并不是對(duì)象本身.
在原型里增加方法.
在上面我們看到的例子里,對(duì)象的方法是在構(gòu)造器里定義好的了.另外一種實(shí)現(xiàn)的途徑是通過原型(prototype).xxx
原型是javascript繼承的一種形式.我們可以為對(duì)象定義好后,再創(chuàng)造一個(gè)方法.原來所有對(duì)象的實(shí)例都將共享.
讓我們來擴(kuò)展最初的?cat?對(duì)象.增加一個(gè)改名的方法.用?prototype?的方式.?
就象你所看到的.我們僅只用了?關(guān)鍵字?prototype?實(shí)現(xiàn)了在對(duì)象定義后馬上增加了changeName方法.這個(gè)方法被所有的實(shí)例共享.
用原型(prototype)?重載?javascript?對(duì)象
原型?在自定義對(duì)象和有選擇性的重載對(duì)象上都可以工作.比如?Date()?或?String?這可能是無止境的.
子類和超類
在JAVA?和C++里,有關(guān)于類層次的外在概念.每一個(gè)類能有一個(gè)角色.
In?Java?and?C++,?there?is?an?explicit?concept?of?the?class?hierarchy.?i.e.?Every?class?can?have?a?super?class?from?which?it?inherits?properties?and?methods.?Any?class?can?be?extended,?or?sub-classed?so?the?resulting?subclass?can?inherit?its?parent's?behavior.?As?we?have?seen,?javascript?supports?prototype?inheritance?instead?of?class?based.?It's?possible?for?inheritance?to?happen?other?ways,?however.
The?following?is?an?example?of?inheritance?through?functions.
下面一個(gè)例子演示了如何繼承通過function?.?
基于繼承的原型是遙遠(yuǎn)的.為?javascript?應(yīng)用程序在許多場(chǎng)合.
(基于原型的繼承在許多javascript的應(yīng)用場(chǎng)合是非常有用的.)
對(duì)象作為聯(lián)合數(shù)組
正如你所知,?(.)操作符能夠用來存儲(chǔ).[]?操作符用來操作數(shù)組.
<script> <BR><!-- <br><br>// These are the same <BR>object.property <BR>object["property"] <br><br>//--> <BR></script>
<script> <BR><!-- <BR>function Circle (xPoint, yPoint, radius) { <BR>this.x = xPoint; <BR>this.y = yPoint; <BR>this.r = radius; <BR>} <br><br>var aCircle = new Circle(5, 11, 99); <BR>alert(aCircle.x); <BR>alert(aCircle["x"]); <BR>//--> <BR></script>
How?do?I?loop?through?properties?in?an?object?
You?need?to?use?a?for/in?loop.
我們可以通過for?in循環(huán)來遍歷對(duì)象的屬性。
<script> <BR><!-- <br><br>var testObj = {<BR>prop1 : "hello", <BR>prop2 : "hello2", <BR>prop3 : new Array("hello",1,2) <BR>} <BR>for(x in testObj) alert( x + "-" + testObj[ x ] ) <BR>//--> <BR></script>
<script> <BR><!-- <BR>var Circle = { x : 0, y : 1, radius: 2 } // another example <br><br>for(p in Circle) <BR>alert( p + "-" + Circle[ p ] ) <BR>//--> <BR></script>
The?important?thing?to?notice?is?that?in?the?object?syntax?the?property?is?an?identifier,?whereas?in?the?array?syntax,?it's?a?string.?The?obvious?benefits?of?using?an?array?syntax?to?access?an?object?is?because?of?the?literal?data?type,?you?can?easily?concat?strings?and?play?around?with?them?to?access?an?object.?For?this?to?work?with?the?standard?syntax,?an?eval()?would?need?to?be?used.
應(yīng)該值得注意的是對(duì)象的屬性只是一個(gè)標(biāo)識(shí)字符,盡管在一個(gè)數(shù)組里是一個(gè)字符串,因?yàn)槭且粋€(gè)literal的數(shù)據(jù)類型,所以有利于使用數(shù)組的方式的操作一個(gè)對(duì)象。你也可以很容易的存取一個(gè)對(duì)象在標(biāo)準(zhǔn)的語句中。這個(gè)時(shí)候eval()函數(shù)可能用得到。
<script> <BR><!-- <br><br>testObj = { <BR>prop1 : "hello", <BR>prop2 : "hello2", <BR>prop3 : new Array("helloa",1,2) <BR>} <br><br>for(x in testObj) alert( x + "-" + testObj[ x ] ) <BR>var prop3 = testObj["prop3"]; <BR>alert(prop3); <BR>//alert(prop[1]); <BR>alert(typeof(prop3)); <BR>alert(eval(prop3)[1]); <BR>alert(typeof(eval(prop3)[1])); <br><br>//--> <BR></script>
網(wǎng)上的東西錯(cuò)誤的太多了,jb51.net修正后的測(cè)試下
[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

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

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

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

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

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

WebSocket與JavaScript:實(shí)現(xiàn)即時(shí)監(jiān)控系統(tǒng)的關(guān)鍵技術(shù)引言:隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,即時(shí)監(jiān)控系統(tǒng)在各個(gè)領(lǐng)域中得到了廣泛的應(yīng)用。而實(shí)現(xiàn)即時(shí)監(jiān)控的關(guān)鍵技術(shù)之一就是WebSocket與JavaScript的結(jié)合使用。本文將介紹WebSocket與JavaScript在即時(shí)監(jiān)控系統(tǒng)中的應(yīng)用,並給出程式碼範(fàn)例,詳細(xì)解釋其實(shí)作原理。一、WebSocket技

如何使用WebSocket和JavaScript實(shí)現(xiàn)線上語音辨識(shí)系統(tǒng)引言:隨著科技的不斷發(fā)展,語音辨識(shí)技術(shù)已成為了人工智慧領(lǐng)域的重要組成部分。而基於WebSocket和JavaScript實(shí)現(xiàn)的線上語音辨識(shí)系統(tǒng),具備了低延遲、即時(shí)性和跨平臺(tái)的特點(diǎn),成為了廣泛應(yīng)用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實(shí)現(xiàn)線上語音辨識(shí)系

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

JavaScript和WebSocket:打造高效的即時(shí)天氣預(yù)報(bào)系統(tǒng)引言:如今,天氣預(yù)報(bào)的準(zhǔn)確性對(duì)於日常生活以及決策制定具有重要意義。隨著技術(shù)的發(fā)展,我們可以透過即時(shí)獲取天氣數(shù)據(jù)來提供更準(zhǔn)確可靠的天氣預(yù)報(bào)。在本文中,我們將學(xué)習(xí)如何使用JavaScript和WebSocket技術(shù),來建立一個(gè)高效的即時(shí)天氣預(yù)報(bào)系統(tǒng)。本文將透過具體的程式碼範(fàn)例來展示實(shí)現(xiàn)的過程。 We

如何使用WebSocket和JavaScript實(shí)現(xiàn)線上預(yù)約系統(tǒng)在當(dāng)今數(shù)位化的時(shí)代,越來越多的業(yè)務(wù)和服務(wù)都需要提供線上預(yù)約功能。而實(shí)現(xiàn)一個(gè)高效、即時(shí)的線上預(yù)約系統(tǒng)是至關(guān)重要的。本文將介紹如何使用WebSocket和JavaScript來實(shí)作一個(gè)線上預(yù)約系統(tǒng),並提供具體的程式碼範(fàn)例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進(jìn)行全雙工

JavaScript教學(xué):如何取得HTTP狀態(tài)碼,需要具體程式碼範(fàn)例前言:在Web開發(fā)中,經(jīng)常會(huì)涉及到與伺服器進(jìn)行資料互動(dòng)的場(chǎng)景。在與伺服器進(jìn)行通訊時(shí),我們經(jīng)常需要取得傳回的HTTP狀態(tài)碼來判斷操作是否成功,並根據(jù)不同的狀態(tài)碼來進(jìn)行對(duì)應(yīng)的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態(tài)碼,並提供一些實(shí)用的程式碼範(fàn)例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個(gè)新的節(jié)點(diǎn)。這個(gè)方法需要兩個(gè)參數(shù):要插入的新節(jié)點(diǎn)和參考節(jié)點(diǎn)(即新節(jié)點(diǎn)將要插入的位置的節(jié)點(diǎn))。

JavaScript中的HTTP狀態(tài)碼取得方法簡(jiǎn)介:在進(jìn)行前端開發(fā)中,我們常常需要處理與後端介面的交互,而HTTP狀態(tài)碼就是其中非常重要的一部分。了解並取得HTTP狀態(tài)碼有助於我們更好地處理介面?zhèn)骰氐馁Y料。本文將介紹使用JavaScript取得HTTP狀態(tài)碼的方法,並提供具體程式碼範(fàn)例。一、什麼是HTTP狀態(tài)碼HTTP狀態(tài)碼是指當(dāng)瀏覽器向伺服器發(fā)起請(qǐng)求時(shí),服務(wù)
