對象的創(chuàng)建方法以及優(yōu)缺點

1、原型模式
 var o = new Object();
 o.name = name;
 o.age = age;
 o.sayName = function() {
  console.log(this.name);
 };
 return o;
}
 
var person1 = createPerson("Nicholas", 29);
var person2 = createPerson("Greg", 27);

優(yōu)點:能夠解決創(chuàng)建多個對象的問題,兼容各個瀏覽器
缺點:沒有解決對象識別的問題,不能知道一個對象的類型

2、構造函數(shù)模式

這種模式主要通過創(chuàng)建自定義的構造函數(shù),從而定義自定義對象類型的屬性和方法

 this.name = name;
 this.age = age;
 this.sayName = function() {
  console.log(this.name);
 }
}
var person1 = new Person("Nicholas", 29);
var person2 = new Person("Greg", 27);
優(yōu)點:可以創(chuàng)建多個對象,解決對象的識別問題
缺點:每個實例都會創(chuàng)建不同的function實例,而其實創(chuàng)建完成同樣任務的function實例是很沒有必要的
    使用構造函數(shù)模式可以解決對象的識別問題,而這也是工廠模式無法辦到的
構造函數(shù)需要以一個大寫字母開頭,而非構造函數(shù)應該以一個小寫字母開頭,這個主要是為了區(qū)別構造函數(shù)和其它函數(shù),構造函數(shù)其實本身也是函數(shù),只是用來創(chuàng)建對象而已
#####3、工廠模式
function Person() {
}
 
Person.prototype.name = "Nicholas";
Person.prototype.age = 29;
Person.prototype.sayName = function() {
 console.log(this.name);
}
 
var person1 = new Person();
var person2 = new Person();
person1.sayName(); // Nicholas
person2.sayName(); // Nicholas
優(yōu)點:不用為構造函數(shù)傳遞參數(shù),可以創(chuàng)建多個相同的對象
    缺點:原型中的屬性被很多實例共享,當屬性為包含引用類型值的屬性時,修改一個實例中屬性的值,另一個實例中的屬性的值也會改變
4、組合式
function Person(name, age) {
 this.name = name;
 this.age = age;
}
 
Person.prototype = {
 constructor: Person,
 sayName: function() {
  console.log(this.name);
 }
}
 
var person1 = new Person("Nicholas", 29);
var person2 = new Person("Greg", 27);
 
person1.sayName(); // Nicholas
person2.sayName(); // Greg
person1.sayName === person2.sayName; // true
使用這種模式創(chuàng)建對象,每個實例都會有自己的一份實例屬性的副本,但同時又共享著對方法的引用,最大限度地節(jié)省了內存,另外,這種混成模式還支持向構造函數(shù)傳遞參數(shù),可謂是集兩種模式之長 
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容