建立物件的方式
1. object建構函式或者物件字面量建立當物件
2. 建構函式建立物件
3. 工廠模式
4. 原型模式
5. 原型和建構函式組合模式
6. 動態原型模式
7. 寄生建構函式模式
8. 穩妥建構函式模式
缺點使用乙個介面建立很多物件,會產生大量重複**
這種模式抽象了建立具體物件的過程.考慮到在ecma中無法建立類,開發人員就發明了一種函式,用函式封裝以特定介面建立物件的細節
缺點:物件型別不可知
function
createperson
(name, age, job);
return o;
}var person1 = createperson("nicholas", 29, "software engineer");
var person2 = createperson("greg", 27, "doctor");
建立自定義的建構函式,從而定義自定義物件型別的屬性和方法
優點:物件型別可知
缺點:缺點:構造了多個相同功能的方法。(可以通過this.func=window.func,但這樣函式變全域性,失去封裝性)
function
person
(name, age, job);
}var person1 = new person("nicholas", 29, "software engineer");
var person2 = new person("greg", 27, "doctor");
優點:可以共享屬性的例項和方法,解決了建構函式的缺點
缺點:所有例項在預設情況下都將取得相同的屬性值,最大問題是,由其共享屬性的本性所導致,
當乙個例項的屬性發生變化時,所有例項屬性都會發生變化
不必在建構函式中定義物件例項的資訊,而是可以將這些資訊直接新增到原型物件中
function
person
()person.prototype.name = "nicholas";
person.prototype.age = 29;
person.prototype.job = "software engineer";
person.prototype.sayname = function
();var person1 = new person();
person1.sayname(); //"nicholas"
var person2 = new person();
person2.sayname(); //"nicholas"
alert(person1.sayname == person2.sayname); //true
更簡單的原型語句
常見的做法是用乙個包含所有屬性和方法的物件字面量來重寫整個原型物件
function
person
()person.prototype =
};
這種寫法本質上重寫了預設的prototype 物件,constructor 屬性也就變成了新
物件的constructor 屬性(指向object 建構函式),不再指向person 函式。如果constructor 的值真的很重要,可以像下面這樣特意將它設
置回適當的值。
function
person
()person.prototype =
};
優點:既有建構函式的優點又有原型模式的優點,建構函式用於定義例項屬性,原型模式用於定義方法和共享屬性,每個例項都會有自己的乙份例項屬性的副本,但同時又共享著對方法的引用,最大限度地節省了記憶體
缺點:不突出原型程式設計泛型的特點
function
person
(name, age, job)
person.prototype =
}var person1 = new person("nicholas", 29, "software engineer");
var person2 = new person("greg", 27, "doctor");
person1.friends.push("van");
alert(person1.friends); //"shelby,count,van"
alert(person2.friends); //"shelby,count"
alert(person1.friends === person2.friends); //false
alert(person1.sayname === person2.sayname); //true
通過檢查某個應該存在的方法是否有效,來決定是否需要初始化原型
確保原型方法只定義一次,if檢測只需一次。(若重寫原型會切斷與原有例項的聯絡,原型模式同坑)
function
person
(name, age, job);}}
var friend = new person("nicholas", 29, "software engineer");
friend.sayname();
優點:可用於構造方法的重構。
缺點:物件型別不可知,此法少用
function
person
(name, age, job);
return o;
}var friend = new person("nicholas", 29, "software engineer");
friend.sayname(); //"nicholas"
所謂穩妥物件,指的是沒有公共屬性,而且其方法也不引用this 的物件。穩妥物件最適合在
一些安全的環境中(這些環境中會禁止使用this 和new)
優點:專用於安全執行環境,建構函式的變數只能通過get函式來獲取。
缺點:物件型別不可知
function
person
(name, age, job);
//返回物件
return o;
物件導向 之建立物件
為什麼需要建立物件?使用object建構函式或物件字面量雖然可以建立單個物件,但是這樣在需要建立很多物件時,會產生大量重複的 1.工廠模式 優點 可以建立多個類似的物件 缺點 無法識別物件的型別 使用object建構函式或物件字面量雖然可以建立單個物件,但是這樣在需要建立很多物件時,會產生大量重複的...
js物件導向,多種建立物件方法!
開始建立物件 1.物件字面量。var clock clock.showtime 呼叫 2.建立object例項 var clock new object clock.hour 12 clock.minute 10 clock.showhour function clock.showhour 呼叫 由...
js物件導向,多種建立物件方法!
1.物件字面量。var clock clock.showtime 呼叫 2.建立object例項var clock new object clock.hour 12 clock.minute 10 clock.showhour function clock.showhour 呼叫 由此可見 屬性是可...