JS中創建對象的幾種方式


每一個對象都是引用類型創建的。

一、工廠模式

 1             function createPerson(){
 2                 var o=new Object();
 3                 o.name=name;
 4                 o.sex=sex;
 5                 o.sayName=function(){
 6                     alert(this.name);
 7                 }
 8                 return o;
 9             }
10             
11             var person1=new createPerson('zhangsan','男');
12             var person2=new createPerson('wangwu','女');

特點:1、用函數來封裝,並以特定接口創建對象;2、有返回值

缺點:雖然解決了創建多個對象的問題,但沒有解決對象識別的問題(怎樣知道一個對象的類型)

二、構造函數模式(通過this實現)

用構造函數可以創建特定類型的對象,同時也可以創建自定義的構造函數,從而定義自定義對象類型的屬性和方法。

 1             function Person(name,age){
 2                 this.name=name;
 3                 this.age=age;
 4                 this.sayName=function(){
 5                     alert(this.name);
 6                 }
 7             };
 8             
 9             var person1=new Person('zhangsan',20);
10             var person2=new Person('wangwu',15);

與工廠模式的區別在於:

1、沒有顯式地創建對象;

2、直接將屬性和方法賦給了this對象

3、沒有return語句

三、原型模式(通過原型對象實現)

創建的每個函數都有一個prototype屬性,這個屬性是一個指針,指向一個對象,而這個對象包含了所有實例共享的屬性和方法。

因此可以將屬性和方法放在原型對象里面,讓所有實例都可以共享。

 1             function Person(){};
 2             
 3             Person.prototype.name='zhangsan';
 4             Person.prototype.age=20;
 5             Person.prototype.sayName=function(){
 6                 alert(this.name);
 7             }
 8             
 9             var person1=new Person();
10             person1.sayName();   //zhangsan
11             
12             var person2=new Person();
13             person2.sayName();   //zhangsan

先新建一個空的構造函數,然后將屬性和方法添加到原型對象里面,再創建實例對象,實例對象就擁有了原型對象里的屬性和方法。不管創建多少個實例對象,原型對象里的屬性和方法都是共享的。

四、組合構造函數模式和原型模式

構造函數模式用於定義實例屬性,原型模式用於定義方法和共享的屬性

 1             function Person(name,age){      //構造函數模式
 2                 this.name=name;
 3                 this.age=age;
 4                 this.friends=['shelly','lucy'];
 5             };
 6             
 7             Person.prototype.sayName=function(){      //原型模式
 8                 alert(this.name);
 9             }
10             
11             var person1=new Person('zhangsan',20);      //構造函數模式
12             var person2=new Person('wangwu',15);
13             
14             person1.friends.push('van');
15             alert(person1.friends);   //shelly,lucy,van
16             alert(person2.friends);   //shelly,lucy

五、動態原型模式

就是將所有代碼裝在一起

六、寄生構造函數模式

 1             function Person(){
 2                 var o=new Object();
 3                 o.name=name;
 4                 o.sex=sex;
 5                 o.sayName=function(){
 6                     alert(this.name);
 7                 }
 8                 return o;
 9             }
10             
11             var person1=new Person('zhangsan','男');
12             var person2=new Person('wangwu','女');

跟工廠模式很像,但是是構造函數創建得

七、穩妥構造函數模式

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM