首頁  >  文章  >  web前端  >  JavaScript中的物件導向介紹_js物件導向

JavaScript中的物件導向介紹_js物件導向

WBOY
WBOY原創
2016-05-16 17:52:161697瀏覽

物件
建立
物件
建構子
公有、私有、特權、靜態成員
this、call和apply
異常處理
繼承
原型
物件
在JavaScript,可以說everything is object,那什麼是物件?物件就是包含一組變數和函數的集合。在其它物件導向語言中物件是由類別的實例化而來,JavaScript是基於原型的物件導向語言,沒有類別的概念,物件是衍生自現有物件的副本。 JavaScript中物件可以分為兩類:Function和Object。

建立物件

為了提高效率,JavaScript自帶內建對象,例如:Object、Function、Array等,所有內建物件都可以透過new來建立。 Function物件分為兩類:實例和建構子。例如alert('my name is X')是Function的實例;而作為建構子的Function,必須透過new來實例化。建立的物件的語法分為以下幾種:

複製程式碼 程式碼如下:

var obj= new Object();var obj={};(Array等類似)
var myFunction=new Function(){//程式碼};function myFunction(){//程式碼}

要注意的是,第一種Function聲明必須在使用之前,而第二種可以在使用之後。

建構子

Function是建構子的起點,建立建構子與上述建立物件Function類似
程式碼如下:


var myFunction=new Function('a',/*程式碼*/)
function myFunction(a){
/*程式碼*/
}


但是由於第一種有效能問題建議使用第二種;Function物件的特點是:它的實例也能作為建構子。
靜態成員


如下代碼: 代碼如下:


var myObj= new Object();
//新增name屬性
myObj.name='LD';
//新增alertName方法
myObj .alertName=function(){
alert(this.name);
}
//執行alertName
myObj.alertName();


name和alertName存在於myObj實例中,不存在於建構子。這個還好理解,但是對於既可以是建構子也可以是實例的Function來說就不那麼容易理解了,如下: 程式碼如下:


var myConstructor=new function(){
//新增靜態屬性
myConstructor.name='LD';
//新增屬性
myConstructor.name='LD';
//新增屬性
myConstructor.name='LD';
//新增屬性
myConstructor.name='LD';
//新增屬性myConstructor.alertName=function(){
alert(this.nam);
} } myConstructor.alertName();


程式碼可以正常運行,因為myConstructor可以是實例,但是name和alertName不會應用到由myConstructor的任何新的實例中。
公有成員 能夠跟隨物件實例化的成員稱之為公有成員,成為公有成員需要修改函數的原型,即prototype。公有方法可以隨建構函式而被繼承下去,方法如下:


複製程式碼


程式碼如下:


function myConstructor(){
}
//新增公有屬性
myConstructor.prototype.myName='LD';
//實例化
var myObj=new myConstructor();
alert(myObj.myName); 由myConstructor實例化的物件可以使用myName,但是myConstructor本身不可以,因為我們把公有成員加到了myConstructor的底層定義中,而非myConstructor實例本身。 私有成員私有成員指的是建構子中定義的變數和方法,與其它語言的類別中用private定義類似,例如:


複製程式碼


程式碼如下:


function myConstructor(){
//新增私有屬性
var myName='Ld'l //新增私有屬性var myName='Ld'l //新增私有方法var alertName=function(){ alert('LD'); } alertName();

特權成員

特權方法,指的是可以被公開訪問,同時其能訪問私有成員,在構造函數作用域總使用this定義的方法,類似其它語言中的公有方法,如下:
複製程式碼 程式碼如下:


程式碼如下:

//私有屬性
var sex='male';
// 特權方法
this.alertSex=function(){
alert(sex);
}
}
}


物件字面量複製程式碼


程式碼如下:


function myConstructor(){
}
//增加公有成員
myConstructor.prototype={
name:'LD',
sex:'male',
name:'LD',
sex:'male',
method :function(){}
}

複製程式碼



複製程式碼


程式碼如下:


//alertName是已經建立好的函數//alertName不需要參數時
alertName.call('物件')
//alertName需要參數時
alertName.call('物件','參數1','參數2')
//alertName使用參數數組時
alertName.applay('物件','參數數組arguments') 異常處理
和c#類似,由try、catch組成,如下:









複製程式碼

程式碼如下: function myFunction(){ window.style.color='red'; } try { myFunction(); } catch{ alert('異常訊息:' exception.name exception.message) } 繼承和原型較多,放到下一篇部落格《JavaScript中的繼承與原型》
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn