對象的創(chuàng)建模式
Object構造函數(shù)來創(chuàng)建
用Object給構造函數(shù)創(chuàng)建的對象缺點:
1.組織形式不好(定義的對象結構中可以加入其它的語句,如:for循環(huán),if語句等)
2.沒有類型(全部都得用Object來定義)
3.內存開銷大
4.代碼冗余
<script>
/*
使用Object給構造函數(shù)創(chuàng)建的對象的缺點:
1.組織形式不好(定義的對象結構中可以加入其它的語句,如:for循環(huán),if語句等)
2.沒有類型(全部都得用Object來定義)
3.內存開銷大
4.代碼冗余
*/
var obj = new Object();
obj.name = "siri";
obj.age = 20;
obj.eat = function(){
console.log("葡萄");
}
var obj2 = new Object();
obj.name = "tom";
obj.age = 24;
obj.eat = function(){
console.log("牛排");
}
--
字面量的形式創(chuàng)建對象
用字面量的形式來創(chuàng)建對象的缺點:
1.沒有類型
2.內存開銷大
3.代碼冗余
優(yōu)點:
組織形式比較友好
<script>
/*
用字面量的形式來創(chuàng)建對象的缺點:
1.沒有類型
2.內存開銷大
3.代碼冗余
優(yōu)點:
組織形式比較友好
*/
var obj = {
name:"siri",
age:20,
say:function(){
console.log("小紅帽");
}
}
var obj = {
name:"tom",
age:23,
say:function(){
console.log("大灰狼");
}
}
</script>
--
工廠模式來創(chuàng)建對象
使用工廠模式創(chuàng)建對象的缺點:
1.內存開銷大
2.沒有類型
優(yōu)點:
1.組織形式友好
2.代碼不冗余
<script>
/*
使用工廠模式創(chuàng)建對象的缺點:
1.內存開銷大
2.沒有類型
優(yōu)點:
1.組織形式友好
2.代碼不冗余
*/
function creatObj(name, age, food) {
return {
name: "siri",
age: 29,
eat: function (food) {
console.log(food);
}
}
}
var obj1 = creatObj("siri", 20, "葡萄")
var obj2 = creatObj("tom", 22, "土豆")
console.log(obj1, obj2);
--
自定義構造函數(shù)來創(chuàng)建對象
使用自定義構造函數(shù)來創(chuàng)建對象的缺點:
內存開銷大
優(yōu)點:
1.組織形式比較友好
2.代碼不冗余
3.擁有類型
<script>
/*
使用自定義構造函數(shù)來創(chuàng)建對象
3. 內存開銷大
1. 組織形式比較友好
2. 代碼不冗余
3. 擁有類型
*/
function Person(name, age) {
this.name = name;
this.age = age;
this.eat = function (food) {
console.log(food);
}
}
var zs = new Person("張三", 20); //this指向zs
zs.eat("葡萄")
var ls = new Person("李四", 19) //this指向ls
ls.eat("米飯")
console.log(zs instanceof Person, ls);
</script>
--
自定義構造函數(shù)+原型鏈的形式創(chuàng)建對象
使用自定義構造函數(shù)+原型鏈的形式創(chuàng)建對象的優(yōu)點:
1.組織形式比較友好
2.代碼不冗余
3.擁有類型
4.內存開銷相對較小
<script>
/*使用自定義構造函數(shù)來創(chuàng)建對象
1. 組織形式比較友好
2. 代碼不冗余
3. 擁有類型
4.內存開銷相對較小
*/
Person.prototype.eat = function (food) {
console.log(this.name+"吃"+food);
}
function Person(name, age) {
this.name = name;
this.age = age;
}
var zs = new Person("張三", 20); //this指向zs
zs.eat("葡萄")
var ls = new Person("李四", 19) //this指向ls
ls.eat("米飯")
</script>
使用create()函數(shù)來創(chuàng)建對象
<script>
/*
使用create函數(shù)來創(chuàng)建對象
*/
var obj = {}
console.log(obj);
//obj2 = Object.create(obj)會創(chuàng)建出一個對象,只是這個對象的隱式原型會被顯示的指定,指定為obj
var obj2 = Object.create({a:"a"})
console.log(obj2);
</script>