欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript中的面向?qū)ο蠼榻B

 更新時(shí)間:2012年06月30日 00:28:21   作者:  
在JavaScript,可以說everything is object,那么什么是對象?對象就是包含一組變量和函數(shù)的集合。在其它面向?qū)ο笳Z言中對象是由類的實(shí)例化而來,JavaScript是基于原型的面向?qū)ο笳Z言,沒有類的概念,對象派生自現(xiàn)有對象的副本
對象
創(chuàng)建
對象
構(gòu)造函數(shù)
公有、私有、特權(quán)、靜態(tài)成員
this、call和apply
異常處理
繼承
原型
對象
在JavaScript,可以說everything is object,那么什么是對象?對象就是包含一組變量和函數(shù)的集合。在其它面向?qū)ο笳Z言中對象是由類的實(shí)例化而來,JavaScript是基于原型的面向?qū)ο笳Z言,沒有類的概念,對象派生自現(xiàn)有對象的副本。JavaScript中對象可以分為兩類:Function和Object。

創(chuàng)建對象

為了提高效率,JavaScript自帶內(nèi)置對象,例如:Object、Function、Array等,所有內(nèi)置對象都可以通過new來創(chuàng)建。Function對象分為兩類:實(shí)例和構(gòu)造函數(shù)。例如alert('my name is X')是Function的實(shí)例;而作為構(gòu)造函數(shù)的Function,必須通過new來實(shí)例化。創(chuàng)建的對象的語法分為以下幾種:
復(fù)制代碼 代碼如下:

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

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

構(gòu)造函數(shù)

Function是構(gòu)造函數(shù)的起點(diǎn),創(chuàng)建構(gòu)造函數(shù)與上述創(chuàng)建對象Function類似
復(fù)制代碼 代碼如下:

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

但是由于第一種有性能問題推薦使用第二種;Function對象的特點(diǎn)是:它的實(shí)例也能作為構(gòu)造函數(shù) 。

靜態(tài)成員

如下代碼:
復(fù)制代碼 代碼如下:

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

name和alertName僅僅存在于myObj實(shí)例中,不存在于構(gòu)造函數(shù)。這個(gè)還好理解,但是對于既可以是構(gòu)造函數(shù)也可以是實(shí)例的Function來說就不那么容易理解了,如下:
復(fù)制代碼 代碼如下:

var myConstructor=new function(){
//添加靜態(tài)屬性
myConstructor.name='LD';
//添加靜態(tài)方法
myConstructor.alertName=function(){
alert(this.nam);
}
}
myConstructor.alertName();

代碼可以正常運(yùn)行,因?yàn)閙yConstructor可以是實(shí)例,但是name和alertName不會應(yīng)用到由myConstructor的任何新的實(shí)例中。

公有成員

能夠跟隨對象實(shí)例化的成員稱之為公有成員,成為公有成員需要修改函數(shù)的原型,即prototype。公有方法可以隨構(gòu)造函數(shù)而被繼承下去,方法如下:
復(fù)制代碼 代碼如下:

function myConstructor(){
}
//添加公有屬性
myConstructor.prototype.myName='LD';
//實(shí)例化
var myObj=new myConstructor();
alert(myObj.myName);

由myConstructor實(shí)例化的對象可以使用myName,但是myConstructor本身不可以,因?yàn)槲覀儼压谐蓡T加到了myConstructor的底層定義中,而非myConstructor實(shí)例本身。
私有成員
私有成員指的是在構(gòu)造函數(shù)中定義的變量和方法,與其它語言的類中用private定義類似,例如:
復(fù)制代碼 代碼如下:

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


特權(quán)成員

特權(quán)方法,指的是可以被公開訪問,同時(shí)其能訪問私有成員,在構(gòu)造函數(shù)作用域總使用this定義的方法,類似其它語言中的公有方法,如下:
復(fù)制代碼 代碼如下:

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


對象字面量

前面我們使用的創(chuàng)建用的都是點(diǎn),例如myConstructor.name=x;myConstructor.sex=x。我們也可以使用對象字面量來達(dá)到相同的目的,例如:
復(fù)制代碼 代碼如下:

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

注意,對象字面量中分隔符為逗號,且最后一個(gè)屬性或方法最后沒有逗號,以防解析錯(cuò)誤。
this、call和apply
this,是一個(gè)依賴于執(zhí)行環(huán)境的關(guān)鍵字,與創(chuàng)建位置無關(guān),this關(guān)鍵字指向的的是使用包含它的函數(shù)的對象,學(xué)過C++和其它語言來說,這個(gè)不難理解。
call和applay,這兩個(gè)的作用強(qiáng)制把方法附加到某個(gè)對象,例如:
復(fù)制代碼 代碼如下:

//alertName是已經(jīng)創(chuàng)建好的函數(shù)
//alertName不需要參數(shù)時(shí)
alertName.call('對象')
//alertName需要參數(shù)時(shí)
alertName.call('對象',‘參數(shù)1','參數(shù)2')
//alertName使用參數(shù)數(shù)組時(shí)
alertName.applay('對象',‘參數(shù)數(shù)組arguments')


異常處理

和c#類似,由try、catch組成,如下:
復(fù)制代碼 代碼如下:

function myFunction(){
window.style.color='red';
}
try{
myFunction();
}
catch{
alert('異常信息:'+exception.name + exception.message)
}

繼承和原型較多,放到下一篇博客《JavaScript中的繼承和原型》

相關(guān)文章

最新評論