JavaScript學習2:物件導向

連江偉發表於2015-03-31

        很多人都知道,程式導向和麵向物件的軟體開發思想,同樣我們的JavaScript也具有這兩種開發模式。今天我們來看看JavaScript中的物件導向的東西。

        物件導向的語言有一個非常重要的特性,那就是類的概念,通過類我們可以建立任意多個具有相同屬性和方法的物件,而JavaScript卻沒有類的概念,但是它有物件,只是此物件非彼物件。

        建立物件    

<span style="font-size:18px;">//建立物件
var person =new Object();
person.name='lian';
person.age=18;
person.run=function(){
	return this.name+this.age +'奮鬥中……';
};</span>

        這樣我們就建立了一個物件,並且為物件建立了屬性和方法,在run()方法裡的this,就代表person物件本身。這種方法是JavaScript建立物件的最基本的方法,但是我們要向建立一個類似的物件,比如name叫做Lee的,怎麼辦?那隻能重新再寫一遍相同的程式碼嘍,你說可以直接將person賦值給person1啊,這樣不省事多了麼,可是這樣做會覆蓋掉person物件的屬性值的,那你說咋辦?

        為了解決這個問題,我們可以使用工廠模式,接觸過設計模式的小夥伴們應該都知道這是什麼玩意。這裡不再多說了,直接上程式碼,看如何實現:

<span style="font-size:18px;">//工廠模式
function CreateObject(name,age){
	var obj =new Object();
	obj.name=name;
	obj.age=age;
	obj.run=function(){
		return this.name+this.age+'奮鬥中……';
	};
	return obj;
};
//建立物件例項
var person1 =CreateObject('Lian',18);
var person2 =CreateObject('Jack',22);
alert(typeof person1);    //返回Object
alert(person2 instanceof Object); //返回true</span>

        怎麼樣,是不是解決了重複例項化的問題,但是隨之而來的另一個問題是識別問題,什麼意思,就是我們根本無法搞清楚他們到底是哪個物件的例項,因為記憶體中會有兩個Object型別的例項物件,你根本不知道哪個是哪個。

        那怎麼辦呢?我們在物件導向的學習中接觸過類,那麼就一定知道建構函式,也叫做構造方法,這種函式是用來初始化類的。我們可以採用建構函式來建立特定的物件,類似於Object物件。舉個例子:

<span style="font-size:18px;">//建構函式方式
function Person(name,age){
	this.name=name;
	this.age=age;
	this.run=function(){
		return this.name+this.age+'吃飯中……';
	};
}

var person1=new Person('Lian',100);
var person2=new Person('Yang',100);
alert(person1 instanceof Person); //返回true,很清楚的告訴我們person1從屬於Person</span>

        小結:使用建構函式的方法,既解決了重複例項化的問題,又解決了物件識別的問題,他與工廠模式的區別在於:

        1沒有顯式的建立物件(newObject());

        2直接將屬性和方法賦值給this物件;

        3沒有return語句

        建構函式和普通函式的唯一區別就是他們呼叫的方式不同。只不過,建構函式也是函式,必須要用new運算子來呼叫,否則就是普通函式。

相關文章