javascript對象的幾種創建方式整理
1.工廠模式
//工廠模式雖然解決了創建多個相似對象的問題,但卻沒有解決對象識別的問題(即怎樣知道一個對象的類型)。
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(‘suga‘,29,‘singer‘);
var person2 = createPerson(‘bts‘,20,‘singer‘);
person1.sayName();
person2.sayName();
2.構造函數模式
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = function(){
alert(this.name);
};
}
var person1 = Person(‘suga‘,29,‘singer‘);
var person2 = Person(‘bts‘,20,‘singer‘);
與工廠模式相比,具有以下特點:
- 沒有顯式創建對象;
- 直接將屬性和方法賦給了this對象;
- 沒有return語句;
- 要創建新實例,必須使用new操作符;(否則屬性和方法將會被添加到window對象)
- 可以使用instanceof操作符檢測對象類型
構造函數的問題:
構造函數內部的方法會被重復創建,不同實例內的同名函數是不相等的。可通過將方法移到構造函數外部解決這一問題,但面臨新問題:封裝性不好。
3.原型模式
function Person(){}
Person.prototype.name = "suga";
Person.prototype.age = 29;
Person.prototype.job = "singer";
Person.prototype.sayName = function() {
alert(this.name);
}
var person1=new Person();
var person2=new Person();
person1.name="果果";
alert(person1.name); --來自實例
alert(person2.name); --來自原型
當為對象實例添加一個屬性時,這個屬性就會屏蔽原型對象中保存的同名屬性。
javascript對象的幾種創建方式整理