標籤:
JavaScript物件導向
一、為每個對象動態添加屬性或方法
功能:返回物件類型原型的引用
格式: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物件導向編程-進階內容