JavaScript中的面向對象介紹
2024-05-06 14:21:39
供稿:網友
對象
創建
對象
構造函數
公有、私有、特權、靜態成員
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定義類似,例如: