JavaScript物件導向編程

來源:互聯網
上載者:User

標籤:rip   app   重慶   變數   pre   ddr   語句   object   需要   

一、JS物件導向編程基礎

對象的建立:

function Dog(name,age){  this.name = name;  /*建立對象的屬性和方法必須加上this*/  this.age = age;  this.eat = function(){    alert(this.color+"、"+this.age+"歲、名字叫"+this.name+"的狗在吃骨頭");   }} var dog = new Dog("Tom",2);dog.eat();   /* color未定義 *//*動態添加屬性方法*/dog.color="黑色";  /*動態添加屬性*/dog.eat();  /*color為黑色*/delete dog.color;  /*刪除屬性*/dog.run=function(){/*動態添加方法*/alert(this.color+this.age+"歲、名字叫"+this.name+"的狗在吃骨頭,吃完就跑");}dog.run();

with語句:將需要使用其屬性和方法的對象用with語句包含起來

with(dog){     alert(color);    alert(name);    alert(age); 
eat();}

for語句:用於遍曆一個對象的所有屬性

for(var dog2 in dog){/*for(var 變數(裝對象的屬性) in 對象) dog[dog2]是通過dog2屬性找到dog對象的值*/alert("屬性名稱字:"+dog2+"-屬性值:"+dog[dog2]); }

二、建立自訂的JS類和對象

(一)工廠方式  (每個對象都有自己的方法 佔用資源)
function Po(name){var obj = new Object();obj.name=name;/*設定的是obj的屬性而不是Po本身的屬性 設定本身的屬性要用this*/obj.say=function(){    alert("我是"+obj.name);    return obj;}var p = Po("張三");   /*擷取傳回值*/var p1 = Po("李四");var p = new Po("張三");/*new的是Po對象 最好用上面的方式擷取*/p.say();/*只設定了obj的屬性而不是Po本身的屬性,需要返回obj對象才能調用obj的方法*/p1.say();alert(p.say==p1.say);/*false*/
}

(二)建構函式方式(每個對象都有自己的方法 佔用資源)  

function Po(name){this.name=name;this.say=function(){    alert("我是"+this.name);}} var p = new Po("張三");var p1 = new Po("李四");p.say();p1.say();alert(p.say==p1.say); /*false 不同對象調的方法不同 即每個對象都有自己的方法 佔用資源*/

(三)原型方式原型方式 (方法共用 但是不能傳參)  

function Po(){Po.prototype.name="李四";Po.prototype.say=function(){alert("我是"+this.name);}}var p = new Po();var p1 = new Po();p.say(); p1.say();alert(p.say==p1.say);   /*true 表示所有對象用同一個方法*、

(四)構造+原型方式(解決了前面提到的問題,但封裝不夠完美)  

function Po(name){//構造方法建原型對象this.name=name;}Po.prototype.say=function(){/*原型方式建立共用方法*/alert("我是"+this.name);}var p = new Po("張三");var p1 = new Po("李四");p.say();p1.say();alert(p.say==p1.say);  //true

(五)更好的構造+原型方式(一種完美的解決方案)  

function Po(name){    this.name=name;if(Po.prototype.say==undefined){    Po.prototype.say=function(){alert("我是"+this.name);    }    }}var p = new Po("張三");var p1 = new Po("李四");p.say();p1.say();alert(p.say==p1.say);  //true

(六)JSON格式  

var Po = {name:"張三", /*逗號隔開,不是分號*/age:12,addr:"重慶",say:function(){alert(this.age+"歲的"+this.name+"現居"+this.addr);}}alert(Po.name);alert(Po.age);alert(Po.addr);Po.say();

三、對象繼承實現

(一)對象冒充

function Po(name){this.name=name;this.say=function(){alert("我是"+this.name);}}function FalsePo(name){this.fpo=Po;this.fpo(name);delete this.fpo;    /*冒充後必須刪除冒充的對象*/this.color=function(){    alert(this.name+"的膚色是黑的");} }var falsePo = new FalsePo("lisi");falsePo.say();falsePo.color();

(二)call()

 1 function Po(name){ 2     this.name=name; 3     this.say=function(){ 4         alert("我是"+this.name); 5     } 6 }         7 function FalsePo(name){ 8     Po.call(this,name);        //基本類.call(對象,參數列表)     9     this.color=function(){10     alert(this.name+"的膚色是黑的");11     }12 }13         var falsePo = new FalsePo("lisi");14     falsePo.say();15     alsePo.color();    

(三)apply()方式

 1 function Po(name,age){ 2     this.name=name; 3     this.age=age; 4     this.say=function(){ 5         alert("我是"+this.name); 6     } 7 } 8              9 function FalsePo(name,age){10     Po.apply(this,[name,age]);        /*基本類.apply(對象,參數數組)*/11                 12     this.color=function(){13         alert(this.age+"歲的"+this.name+"的膚色是黑的");14     }15 }16 var falsePo = new FalsePo("lisi",20);17 falsePo.say();18 falsePo.color();

(四)原型鏈

function Po(name){this.name=name;}Po.prototype.say=function(){alert("我是"+this.name);}function fPo(name,addr){Po.call(this,name);this.addr=addr;}fPo.prototype=new Po(); fPo.prototype.live=function(){alert(this.name+"住在"+this.addr); }var pp = new fPo("張三","重慶");pp.say();pp.live(); 

  

  

  

 

JavaScript物件導向編程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.