Javascript深入之創建對象的多種方式以及優缺點
阿新 • • 發佈:2018-03-11
丟失 創建對象 工廠 pre 使用 OS 不能 屬性和方法 一次
1.工廠模式
function createPerson(name) {
var o = new Object();
o.name = name;
o.getName = function() {
console.log(this.name)
};
return o;
}
var person1 = createPerson(‘kevin‘)
缺點:對象無法識別,因為所以的實例都指向一個原型
2.構造函數模式
function Person(name) { this.name = name; this.getName = function() { console.log(this.name); } } var person1 = new Person(‘kevin‘)
優點:實例可以識別為一個特定的類型
缺點:每次創建實例時,每個方法都要被創建一次
2.1構造函數模式優化
function Person(name) {
this.name = name;
this.getName = getName;
}
function getName() {
console.log(this.name)
}
var person1 = new Person(‘kevin‘)
優點:解決了每個方法都要被重新創建的問題
缺點:這叫啥封裝...
3.原型模式
function Person(name) { } Person.prototype.name = ‘kevin‘; Person.prototype.getName = function() { console.log(this.name); } var person1 = new Person()
優點:方法不會重新創建
缺點:1.所有的屬性和方法都共享 2.不能初始化參數
3.1原型模式優化
function Person(name) {
}
Person.prototype = {
name: ‘kevin‘,
getName: function(){
console.log(this.name)
}
}
var person1 = new Person()
優點:封裝性好一點
缺點:重寫了原型,丟失了 constructor屬性
3.2 原型模式優化
function Person(name) {} Person.prototype = { constructor: Person, name:‘kevin‘, getName: function() { console.log(this.name) } } var person1 = new Person()
優點:實例可以通過constructor屬性找到所屬構造函數
缺點:原型模式該有的缺點還是有
4. 組合模式
構造函數模式與原型模式雙劍合璧
function Person(name) {
this.name = name;
}
Person.prototype = {
constructor: Person,
getName: function() {
console.log(this.name)
}
}
var person1 = new Person()
優點:該共享的共享,該私有的私有,使用最廣泛的方式
缺點: 有的人就是希望全部都寫在一起,即更好的封裝性
4.1 動態原型模式
function Person(name) {
this.name = name;
if (typeof this.getName != ‘function‘) {
Person.prototype.getName = function() {
console.log(this.name)
}
}
}
var person1 = new Person()
註意:使用動態原型模式時,不能用對象字面量重寫原型
解釋下為什麽:
function Person(name) {
this.name = name;
if (typeof this.getName != ‘function‘) {
Person.prototype = {
constructor: Person,
getName: function() {
console.log(this.name)
}
}
}
}
var person1 = new Person(‘kevin‘)
var person2 = new Person(‘marven‘)
person1.getName() // 報錯 並沒有該方法
person2.getName() // 註釋掉上面的代碼,這句是可以執行的
Javascript深入之創建對象的多種方式以及優缺點