本文實例講述了js核心基礎之構造函數constructor用法。分享給大家供大家參考,具體如下:
在js中,可以利用構造函數來創建特定類型的對象,其中,有一些原生的構造函數,Object、Array、等等,所以,當type of Object時,返回的是function。此外,我們還可以創建自定義的構造函數,從而自定義對象的屬性以及方法。
例如:
function Person(name,age,job) { this.name=name; this.age=age; this.job=job; this.sayName=function () { alert(this.name); }}var person1=new Person('zhy',18,'SoftWare Engineer');var person2=new Person('zhy2',19,'Doctor');
注意:要創建Person的新實例,必須使用new操作符。如果不使用new,則屬性和方法都被添加給了window對象了。
這種方式調用構造函數實際上會經歷一下4個步驟:
① 創建一個新對象;
② 將構造函數的作用域賦給新對象,因此,this就指向了這個新對象;
③ 執行構造函數中的代碼,即為這個新對象添加屬性、方法;
④ 返回新對象。
缺點:
在上述例子中,我們可以知道,每個實例都有一個sayName的方法,但是
console.log(person1.sayName==person2.sayName);//false
因為,每創建一個實例的時候,實際上所做的是下面這種:
function Person(name,age,job) { this.name=name; this.age=age; this.job=job; this.sayName=new Function () { alert(this.name); }}
所以,person1的sayName跟person2的sayName不是同一個實例。但是我們可以這樣做:
function Person(name,age,job) { this.name=name; this.age=age; this.job=job; this.sayName=sayName; }function sayName(){ alert(this.sayName);}
這樣一來,每個實例對象里面 的sayName函數指向的都是同一個函數。
可是問題又來了,如果對象有很多的函數要定義,那么就要定義很多個全局函數,沒有封裝性可言了,好在這些問題可以通過使用原型模式來解決。
本文參照《JavaScript高級程序編程》
希望本文所述對大家JavaScript程序設計有所幫助。
新聞熱點
疑難解答