javascript物件導向程式設計
在學習js物件導向編程之前,首先需要知道什麼是物件導向。物件導向語言都有類的概念,通過它可以建立具有相同屬性和方法的對象。但js並沒有類的概念,因此js中的對象和其他語言的對象有所不同。
js對象可以定義為:”無需屬性的集合,其屬性可以是基本值、對象和函數。每個對象都是基於一個參考型別建立的。
js建立對象有以下兩種方法:
1、建立一個Object執行個體:
var person = new Object();
2、使用對象字面量:
var person ={};
3、原廠模式:
function createPerson(name,age,job){ var p = new Object(); p.name=name; p.age=age; p.job=job; return p; } var p1=createPerson("jack",22,“front-end Engineer"); var p2=.....;
4.建構函式模式:
function Person(name,age,job){ this.name=name; this.age=age; this.job=job; this.sayName=function(){alert(this.name);}; } var p1= new Person("jack",22,"front-end Engineer"); var p2=...;
這裡暫停一下,因為建構函式模式比較重要,這裡解釋一下:這裡實際上是經曆了以下4個步驟:
(1)建立一個對象;
(2)將建構函式範圍賦給這個對象(所以this將指向這個新建立的對象)
(3)執行裡面的代碼,為新對象添加屬性;
(4)返回新對象;
上面建立的p1和p2都有一個constructor的屬性,它指向Person。並且p1和p2即使Person的執行個體,同時也是Object的執行個體,因為所有對象都繼承自Object。
缺陷:每個方法都要在執行個體上重新建立一遍,js中的函數是對象,因此可以將函數轉移到建構函式的外部:
function Person(name,age,job){ this.name=name; this.age=age; this.job=job; this.sayName=sayName; } fucntion sayName(){ alert("this.name"); } var p1=.....; var p2=....;
5.原形模式:
我們建立的函數都有一個prototype屬性,它是一個指向一個對象的指標。