js物件導向編程-進階內容

來源:互聯網
上載者:User

標籤:

JavaScript物件導向

一、為每個對象動態添加屬性或方法

功能:返回物件類型原型的引用 

  • prototype的使用 

格式:class.prototype

情境:

比如說:A寫了一個類,交給B,B在使用時發現A寫的類的功能有所欠缺,但是B沒有權力改寫A的檔案,這時該怎麼辦?

Function Person(name1,age1){

This.name=name1;

This.age=age1;

}

Var p1=new Person(‘zhangsan’,30);

p1.sex=’男’

B認為這個類還應該有一個sex屬性:

 

function Preson(name,age){      this.name=name;      This.age=age;       }var p1=new Person(‘zhangsan‘,30);var p2=new Person(‘lisi‘,20); //p2沒有sex屬性//以後每次執行個體化的person類對象都會自動擁有sex屬性//即使是之前建立的person類對象也會自動擁有sex屬性 //為Person類添加了一個叫sex的成員屬性Person.prototype.sex=‘男‘;Person.prototype.say=function(){ //為Person類添加了一個say成員方法alert(this.name+this.age+this.sex);    };

在實際開發中,類內定義思考題1.:

 

this.speak=function(){}與person.prototype.speak=function(){}有何區別?

以上兩種方法,最終都給Person類添加了一個叫speak的方法

第一種:類內定義成員方法,所以使用這個類的程式,都會自動擁有該方法

第二種:類外定義成員方法,只有當前應用程式可以使用speak方法

思考題2.:

l 擴充數組類的功能:

為每一個數組對象添加一個方法,可以尋找某個元素的所在位置

Array  -->系統自訂類

思考題3:

擴充數字類的功能:

為一個數字對象添加一個方法,該方法的參數為任意數目的整數,然後將所有參數累加到一起,並返回

二、Object類的使用

在Js中,Object是所有類的基類,使用Object類來建立自訂對象時,可以無需定義建構函式

如:在以前,我們需要定義一個人,必須將人這個類定義出來

function Person(){

}

但是,我們可以看出,這個類是空的,裡面沒有任何屬性或方法,通常來講

這個類的對象一般屬於和方法是後添加的

既然這個類是空的,所以我們考慮使用Object類

定義類對象時,不考慮類的類型,只需要儲存多個資料,可以考慮使用Object類

如,Object類下有一個方法:

hasOwnProperty(property) ;判斷對象下是否具有某個屬性

說明object類下的對象都有這個方法

#p#js教程-物件導向編程#e#

三、javascript中類比類的靜態屬性

在有些物件導向的語言中,可以使用static關鍵字定義類的靜態屬性或方法,這一點,在JavaScript可以進行類比。

文法:類名.屬性名稱

如:

Math.random(); //使用類名.形式調用的都是靜態成員

四、類比類的私人屬性

  • 在物件導向思想中,對於有些敏感的,不想公開的成員可以定義為私人的,在JavaScript中可以類比這個功能。

文法:

function Person(p_name){

var name = p_name; //在類內定義屬性時前面加var表示私人的

//私人成員不能在外面被訪問

//如果想設定私人成員屬性值,可以通過

//建構函式傳參

}

五、類比類的繼承功能

l 文法:

Object.prototype.ext=function(parObject){

for(var i in parObject){

this[i]=parObject[i];

}

};

什麼情況下使用繼承?

有一個類,我們可以使用這個類,但這個類的功能不夠完善,我們還不能修改它的原始碼,所以需要在自己的類中繼承這個類

舉例:

Function Person()

{

This.name

This.age

This.say=function

}

但是,我們想完成對一個學生的描述,這時Person類裡沒有學號,所以我們要繼承Person;

六、javascript閉包

所謂“閉包”,指的是一個擁有許多變數和綁定了這些變數的環境的運算式(通常是一個函數),因而這些變數也是該運算式的一部分。

什麼時候用閉包

想訪問函數內部的變數時

讓函數內部的變數始終儲存在記憶體中

 function test1(){

  i=100;

  function test2(){

  alert(i++);

  }

return test2;    返回test2函數的首地址給一個全域變數

  這裡用到了變數i,所以i的值不會消失,這就是閉包

}

 var result=test1();

 result();

七、try…catch語句

  • 我們可以添加 try...catch 語句,這樣當錯誤發生時可以採取更適當的措施。

文法:

try{

//要執行的語句

//當這些語句出現錯誤時,會被catch捕獲,從而執行catch語句中指定的內容

}

catch(error){

}

有時,我們可能故意讓程式的catch語句運行

Throw語句

  • throw 聲明的作用是建立 exception(異常)。你可以把這個聲明與 try...catch 聲明配合使用,以達到控製程序流併產生精確錯誤訊息的目的。

八、關於調試

1) 設定斷點:程式運行到這裡會自動停止

2) 使用逐語句:遇到函數時會進入到函數的內部

3) 使用逐過程:遇到函數時,直接取函數的運行結果,而不是進入函數

九、JavaScript範圍鏈

js物件導向編程-進階內容

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.