JavaScript中的物件導向介紹

來源:互聯網
上載者:User

對象
建立
對象
建構函式
公有、私人、特權、靜態成員
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.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 alertName=function(){
alert('LD');
}
alertName();

特權成員

特權方法,指的是可以被公開訪問,同時其能訪問私人成員,在建構函式範圍總使用this定義的方法,類似其它語言中的公有方法,如下: 複製代碼 代碼如下:function myConstructor(){
//私人屬性
var sex='male';
// 特權方法
this.alertSex=function(){
alert(sex);
}
}

對象字面量

前面我們使用的建立用的都是點,例如myConstructor.name=x;myConstructor.sex=x。我們也可以使用對象字面量來達到相同的目的,例如: 複製代碼 代碼如下:function myConstructor(){
}
//添加公有成員
myConstructor.prototype={
name:'LD',
sex:'male',
method:function(){}
}

注意,對象字面量中分隔字元為逗號,且最後一個屬性或方法最後沒有逗號,以防解析錯誤。
this、call和apply
this,是一個依賴於執行環境的關鍵字,與建立位置無關,this關鍵字指向的的是使用包含它的函數的對象,學過C++和其它語言來說,這個不難理解。
call和applay,這兩個的作用強制把方法附加到某個對象,例如: 複製代碼 代碼如下://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中的繼承和原型》

相關文章

聯繫我們

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