本文實例講述了JavaScript創建對象方法。分享給大家供大家參考,具體如下:
最簡單的方式就是創建一個Object對象,并為其添加屬性和方法。
//示例代碼var person=new Object()person.name="yumi"person.age=18person.job="coder"person.sayName=function(){  alert(this.name)}person.sayName()//輸出yumi這種方式使用同一個接口創建多個對象,會出現大量重復代碼。
1.工廠模式
JavaScript中無法創建類,我們可以用函數來封裝以特定接口創建對象的細節。
//示例代碼function createPerson(name,age,job){  var o=new Object();  o.name=name;  o.age=age;  o.job=job;  o.sayName=function(){    alert(this.name)  };  return o;}var person1=createPerson("yumi",18,"coder");var person2=createPerson("echo",21,"player");person1.sayName();//輸出yumiperson2.sayName();//輸出echo工廠模式雖然解決了創建多個相似對象的問題,但卻沒有解決對象識別問題,即怎樣知道一個對象的類型。
2.構造函數模式
可以創建自定義的構**造函數,從而定義自定義對象類型的屬性和方法。
//示例代碼function Person(name,age,job){  this.name=name;  this.age=age;  this.job=job;  this.sayName=function(){    alert(name);  }}var person1=new Person("yumi",18,"coder");var person2=new Person("echo",21,"player");person1.sayName();//輸出yumiperson2.sayName();//輸出echo創建出的對象既是Object的實例,也是Person的實例,也就是說將來我們可以將它的實例標識為特定類型,這也是優于工廠模式的地方。但是構造函數模式也有缺點,即就是每實例化一個對象,對象方法都會創建一遍,我們可以按如下方法稍加改進:
//示例代碼function Person(name,age,job){  this.name=name;  this.age=age;  this.job=job;  this.sayName=sayName;}function sayName(){  alert(name);}var person1=new Person("yumi",18,"coder");var person2=new Person("echo",21,"player");person1.sayName();person2.sayName();將函數拿到構造函數外部,構造函數內部將sayName屬性設成全局sayName函數(一般單獨的函數名存放的是指向該函數的指針,而函數名加括號為該函數的執行結果)。但這樣做,暴露出的問題是:全局作用域中定義的函數只能被某一個對象調用,不符合全局定義了。而且,如果某個對象有很多方法,這些方法都定義在全局作用域的話,也就沒什么封裝性可言了。
3.原型模式
前面我們說了,構造函數模式的缺點是屬性或方法在構造函數作用域中只能被某個對象調用,想想我們在其他面向對象語言中的處理方式,是將公用的屬性方法定義在父類中,然后通過繼承父類調用。但是JavaScript中不存在類、繼承這些概念,而是通過原型鏈實現“繼承”。
新聞熱點
疑難解答
圖片精選