當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JavaScript 面向对象编程实现
生活随笔
收集整理的這篇文章主要介紹了
JavaScript 面向对象编程实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近在捉時間,對JavaScript高級程序設計進行叫系統的補強學習。
經過幾天的學習,今天特意整理了JavaScript的面向對象的編程實現,也是一個基本問題:怎樣建立對象?
其實寫過Js代碼的人,也已經涉及到對象的建立了,我們使用的其實是一種被稱為JavaScript Object Notation(縮寫 JSON)的形式,翻譯為中文就是“JavaScript對象表示法"。
JSON為創建對象提供了非常簡便的方法。例如,
1).創建一個沒有任何屬性的對象:
var?o={}; 2).創建一個對象并設置屬性及初始值:
1var?person?=?{
2??????????name:?"Angel",?
3??????????age:?18,?
4??????????married:?false
5??????????}; 3) . 創建一個對象并設置屬性和方法:
1var?speaker?=?
2{
3text:?"Hello?World",
4?say:?function()
5???????{
6?????????alert(this.text);
7???????}
8};
4).創建一個更復雜的對象,嵌套其他對象和對象數組等:
?1var?company?=
?2{
?3name:?"Microsoft",
?4
?5product:?"softwares",
?6
?7chairman:?{name:?"Bill?Gates",?age:?53,?Married:?true},
?8
?9employees:?[{name:?"Angel",?age:?26,?Married:?false},?{name:?"Hanson",?age:?32,?Marred:?true}],
10
11readme:?function()?{document.write(this.name?+?"?product?"?+?this.product);}
12};
總結:
????JSON 的形式就是用大括“{}”號包括起來的項目列表,每一個項目間并用逗號“,”分隔,而項目就是用冒號“:”分隔的屬性名和屬性值。這是典型的字典表示形式,也再次表明了 JavaScript 里的對象就是字典結構。不管多么復雜的對象,都可以被一句JSON 代碼來創建并賦值。
????其實,JSON 就是JavaScript 對象最好的序列化形式,它比XML 更簡潔也更省空間。對象可以作為一個JSON 形式的字符串,在網絡間自由傳遞和交換信息。而當需要將這個JSON 字符串變成一個JavaScript 對象時,只需要使用eval 函數這個強大的數碼轉換引擎,就立即能得到一個JavaScript 內存對象。正是由于JSON 的這種簡單樸素的天生麗質,才使得她在AJAX 舞臺上成為璀璨奪目的明星。
JavaScript 就是這樣,把面向對象那些看似復雜的東西,用及其簡潔的形式表達出來。卸下對象浮華的濃妝,還對象一個眉目清晰!
類的聲明:
理解了JSON構建對象的形式,那么我們下面來用另一種形式聲明一個類,并構建對象:
思想:在JavaScript 中我們可以使用new 操作符結合一個函數的形式來創建對象
?1function?ClassA()?//構造函數不帶參數
?2{
?3???var?_privateProp?=?"privateProp";?//?通過var關鍵字聲明一個局部變量,其作用域是該類的內部不對外公開;
?4???this.p1?=?"p1";
?5???this.p2?=?"p2";
?6???this.f1?=?function(){??//?f1?方法
?7??????alert("I?am?f1!");
?8???}
?9???this.f2?=?function(){??//?f2?方法
10??????alert("I?am?f2!");
11???}
12}
13
?2
?3ClassA.prototype?=?{
?4???p1?:?"p1";
?5???p2?:?"p2";
?6???f1?:?function()?{
?7??????alert("f1");
?8???}
?9???f2?:?function()?{
10??????alert("f2");
11???}??
12}
上面這種方式使用{} 的方式聲明了一個匿名對象,大括號內用逗號將屬性與值得列表分隔開。
可以看到,采用prototype的方式聲明類,代碼更加簡潔明了,因此這種方式在許多Ajax開發框架中得到廣泛的應用。
如:prototype框架,Dojo框架。
接下來我們來看一下 繼承,即如何來實現繼承?
注意:JavaScript語言本身并沒有提供對于繼承的語法的支持,但是仍然可以采用復制屬性和對象的方式來實現繼承。
下面是實現繼承最直接的方式:(構建一個新的類SubClassA 去繼承ClassA所有的東西,同時新設置一方法newMethod)
?1function?ClassA()?{}
?2
?3ClassA.prototype?=?{
?4???p1?:?"p1";
?5???p2?:?"p2";
?6???f1?:?function()?{
?7??????alert("f1");
?8???}
?9???f2?:?function()?{
10??????alert("f2");
11???}??
???????? newMethod : function()
??????? {
???????????????alert("newMethod");
??????? }
12}
雖然這種實現方式表面上解決了問題(其實我并認為這是繼承機制的概念),但是兩個類聲明中的代碼重復書寫是一個很大的隱患,因為如果ClassA類的定義改變了,那么SubClassA類也要同步進行手工修改,顯然不是那么回事的。
解決方案可以這樣,我們可以利用for(... in ...)語句,遍歷ClassA類的所有屬性和方法,將其"復制"到新聲明的SunClassA類中。上面代碼修改后如下:
?1function?SubClassA()?{}
?2
?3for(p?in?ClassA.prototype)
?4{
?5???SubClassA.protopyte[p]?=?ClassA.prototype[p];
?6}
?7SubClassA.prototype.newMethod?=?function(){
?8???alert("new?Method!");
?9}
10
SubClassA類的聲明中,首先通過for(... in?...)語句將ClassA的所有原型屬性和方法復制到SubClassA的prototype屬性中,然后聲明一個新的原型方法newMethod。
結束語
下次介紹常見的Ajax框架中的面向對象編程(Prototype/Dojo)
經過幾天的學習,今天特意整理了JavaScript的面向對象的編程實現,也是一個基本問題:怎樣建立對象?
其實寫過Js代碼的人,也已經涉及到對象的建立了,我們使用的其實是一種被稱為JavaScript Object Notation(縮寫 JSON)的形式,翻譯為中文就是“JavaScript對象表示法"。
JSON為創建對象提供了非常簡便的方法。例如,
1).創建一個沒有任何屬性的對象:
var?o={}; 2).創建一個對象并設置屬性及初始值:
1var?person?=?{
2??????????name:?"Angel",?
3??????????age:?18,?
4??????????married:?false
5??????????}; 3) . 創建一個對象并設置屬性和方法:
1var?speaker?=?
2{
3text:?"Hello?World",
4?say:?function()
5???????{
6?????????alert(this.text);
7???????}
8};
4).創建一個更復雜的對象,嵌套其他對象和對象數組等:
?1var?company?=
?2{
?3name:?"Microsoft",
?4
?5product:?"softwares",
?6
?7chairman:?{name:?"Bill?Gates",?age:?53,?Married:?true},
?8
?9employees:?[{name:?"Angel",?age:?26,?Married:?false},?{name:?"Hanson",?age:?32,?Marred:?true}],
10
11readme:?function()?{document.write(this.name?+?"?product?"?+?this.product);}
12};
總結:
????JSON 的形式就是用大括“{}”號包括起來的項目列表,每一個項目間并用逗號“,”分隔,而項目就是用冒號“:”分隔的屬性名和屬性值。這是典型的字典表示形式,也再次表明了 JavaScript 里的對象就是字典結構。不管多么復雜的對象,都可以被一句JSON 代碼來創建并賦值。
????其實,JSON 就是JavaScript 對象最好的序列化形式,它比XML 更簡潔也更省空間。對象可以作為一個JSON 形式的字符串,在網絡間自由傳遞和交換信息。而當需要將這個JSON 字符串變成一個JavaScript 對象時,只需要使用eval 函數這個強大的數碼轉換引擎,就立即能得到一個JavaScript 內存對象。正是由于JSON 的這種簡單樸素的天生麗質,才使得她在AJAX 舞臺上成為璀璨奪目的明星。
JavaScript 就是這樣,把面向對象那些看似復雜的東西,用及其簡潔的形式表達出來。卸下對象浮華的濃妝,還對象一個眉目清晰!
類的聲明:
理解了JSON構建對象的形式,那么我們下面來用另一種形式聲明一個類,并構建對象:
思想:在JavaScript 中我們可以使用new 操作符結合一個函數的形式來創建對象
?1function?ClassA()?//構造函數不帶參數
?2{
?3???var?_privateProp?=?"privateProp";?//?通過var關鍵字聲明一個局部變量,其作用域是該類的內部不對外公開;
?4???this.p1?=?"p1";
?5???this.p2?=?"p2";
?6???this.f1?=?function(){??//?f1?方法
?7??????alert("I?am?f1!");
?8???}
?9???this.f2?=?function(){??//?f2?方法
10??????alert("I?am?f2!");
11???}
12}
13
其實,如果你愿意把函數當作“類”的話,她就是“類”,因為她本來就有“類”的那些特征。難道不是嗎?她生出的兒子各個都有相同的特征,而且構造函數也與類同名嘛!
利用prototype屬性還可以實現另外一種類的聲明方式:
?1function?ClassA()?{}?2
?3ClassA.prototype?=?{
?4???p1?:?"p1";
?5???p2?:?"p2";
?6???f1?:?function()?{
?7??????alert("f1");
?8???}
?9???f2?:?function()?{
10??????alert("f2");
11???}??
12}
上面這種方式使用{} 的方式聲明了一個匿名對象,大括號內用逗號將屬性與值得列表分隔開。
可以看到,采用prototype的方式聲明類,代碼更加簡潔明了,因此這種方式在許多Ajax開發框架中得到廣泛的應用。
如:prototype框架,Dojo框架。
接下來我們來看一下 繼承,即如何來實現繼承?
注意:JavaScript語言本身并沒有提供對于繼承的語法的支持,但是仍然可以采用復制屬性和對象的方式來實現繼承。
下面是實現繼承最直接的方式:(構建一個新的類SubClassA 去繼承ClassA所有的東西,同時新設置一方法newMethod)
?1function?ClassA()?{}
?2
?3ClassA.prototype?=?{
?4???p1?:?"p1";
?5???p2?:?"p2";
?6???f1?:?function()?{
?7??????alert("f1");
?8???}
?9???f2?:?function()?{
10??????alert("f2");
11???}??
???????? newMethod : function()
??????? {
???????????????alert("newMethod");
??????? }
12}
雖然這種實現方式表面上解決了問題(其實我并認為這是繼承機制的概念),但是兩個類聲明中的代碼重復書寫是一個很大的隱患,因為如果ClassA類的定義改變了,那么SubClassA類也要同步進行手工修改,顯然不是那么回事的。
解決方案可以這樣,我們可以利用for(... in ...)語句,遍歷ClassA類的所有屬性和方法,將其"復制"到新聲明的SunClassA類中。上面代碼修改后如下:
?1function?SubClassA()?{}
?2
?3for(p?in?ClassA.prototype)
?4{
?5???SubClassA.protopyte[p]?=?ClassA.prototype[p];
?6}
?7SubClassA.prototype.newMethod?=?function(){
?8???alert("new?Method!");
?9}
10
SubClassA類的聲明中,首先通過for(... in?...)語句將ClassA的所有原型屬性和方法復制到SubClassA的prototype屬性中,然后聲明一個新的原型方法newMethod。
結束語
下次介紹常見的Ajax框架中的面向對象編程(Prototype/Dojo)
轉載于:https://www.cnblogs.com/Dlonghow/archive/2008/07/04/1235705.html
總結
以上是生活随笔為你收集整理的JavaScript 面向对象编程实现的全部內容,希望文章能夠幫你解決所遇到的問題。