JavaScript學習篇之——面向對象

JavaScript對象是什麼

JavaScript中所有的事物都是對象,對象就是包含一組變量和函數的集合,或者說對象隻是帶有屬性和方法的特殊數據類型。在其它面向對象語言中對象是類的實例化來的,JavaScript其它面向對象的語言不同的是JavaScript是基於原型的面向對象語言,沒有類的概念,所有的一切對象都派生自現有對象的一個副本。

創建JavaScript對象

JavaScript本身包含很多對象,包括Array、String、Boolean、Number、Mah、Data、RegExp、Global等。除此之外JavaScript還允許自定義對象。

通過JavaScript,我們可以定義並創建自己的對象。創建新對象有兩種不同的方法:

1.定義並創建對象的實例使用Object;

2.使用構造函數Function來定義對象,然後創建新的對象實例。

方法1 Object

Object方法來創建一個對象以及它的實例:

varperson=new Object();
person.firstname="Bill";
person.lastname="Gates";
person.age=56;
person.eyecolor="blue";

實例:

person={firstname:"John",lastname:"Doe",age:50,eyecolor:"blue"};

方法2 Fucntion

使用Fucntion構造函數來創造對象以及它的實例

 function person(firstname,lastname,age,eyecolor)
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
}

使用構造函數創建對象實例

var myFather=newperson("Bill","Gates",56,"blue");

備註:在使用構造函數創造對象時,還有另一種創造對象的方法,但是這種方法在性能上不如上面這種方法,在聲明順序上有嚴格的要求,使用起來不是很方便,所以不建議使用:

var person=new Function (firstname,this.firstname=firstname;lastname,this.lastname=lastname;age,this.age=age;eyecolor,
this.eyecolor=eyecolor;
);

添加成員

添加靜態成員

1 Object方法

Object對象添加靜態成員隻存在於對象的myObj實例而不存在構造函數中。

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

2 Function方法

Function添加靜態成員可以存在myObj實例,也可存在構造函數中。

var myObj=newfunction(){
//添加靜態屬性
myObj.name='LD';
//添加靜態方法
myObj.alertName=function(){
alert(this.nam);
}
}
myObj.alertName();

關於上面添加的靜態成員,隻能應用於myObj這個實例中,不能應用於其它的實例中,否則會報錯,這就是靜態成員的應用。

添加公有成員

能夠使實例化的對象包含的方法稱為公有成員,需要修改函數的原型,即prototype屬性,修改後,任何繼承該對象的對象已經存在的所有實例都會立即繼承統一的變化。

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

由myConstructor實例化的對象可以使用myName,但是myConstructor本身不可以,因為我們把公有成員加到瞭myConstructor的底層定義中,而非myConstructor實例本身。

添加私有成員

私有成員就是在構造函數中定義的變量和函數,這個比較簡單隻要在構造函數大括號中的屬性和方法都算是私有的。

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

添加特權成員

特權成員與私有成員不同,特權成員能夠被公開訪問,而且還能訪問私有成員,特權成員是指在構造函數的作用域中使用this定義的方法

functionmyConstructor(){
//私有屬性
varname='Devin';
// 特權方法
this.alertName=function(){
alert(name);
}
}

成員之間比較

私有成員和特權成員都再函數的內部,他們會被帶到函數的每一個實例中,因而將占用大量的內存;公有的原型成員是對象藍圖的一部分,適用於通過new關鍵字實例化該對象的每一個實例;靜態成員隻適用於對象的一個特殊實例。

You May Also Like