標籤:屏蔽 儲存 多個 對象 blog nbsp 方法 on() 封裝
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對象的幾種建立方式整理