1.工厂模式
优点:能够批量创建对象。
缺点:会为每一个对象添加上方法。
function createCat(name, age, color) {
var cat = new Object();
cat.name = name;
cat.age = age;
cat.color = color;
cat.catchM = function () {
return this.name + '在抓老鼠';
};
return cat;
}
var cat1 = createCat('咪咪', 1, '白色');
var cat2 = createCat('喜喜', 2, '黄色');
console.log(cat1.catchM()==cat2.catchM())//false
console.log(cat1);
2.构造函数模式:
构造函数需要实例化,需要使用new关键字。
function dog(name, age, color) {
this.name = name;
this.age = age;
this.color = color;
this.run = function () {
console.log( this.name + '在奔跑');
}
}
var dog1 = new dog('xixi', 1, 'white');
console.log(dog1);
var dog2 = new dog('tt', 1, 'black');
console.log(dog2);
console.log(dog1.run());
console.log(dog2.run() == dog1.run())//flase
工厂模式与构造函数的区别:
①构造函数不需要return语句。
②构造函数没有显式的创建对象。
③构造函数直接将属性和方法赋给了this对象。
3.原型模式:
function book() {
}
book.prototype.name = 'javascript';
book.prototype.page = 600;
book.prototype.look = function () {
console.log(this.name)
}
var o1 = new book();
o1.name='java';
o1.page=200;
console.log(o1);
o1.look();
var o2 = new book();
o2.name='javaaaa'
console.log(o2);
o2.look();
console.log(o1.look == o2.look)//true
function book() {
}
book.prototype.name = 'javascript';
book.prototype.page = 600;
book.prototype.fri=[1,2,3]
book.prototype.look = function () {
console.log(this.name)
}
var o1 = new book();
o1.name='java';
o1.page=200;
o1.fri=[1,2,3];
如果这里是o1.fri.push(4);那么console.log(o1.fri == o2.fri)//true。
因为被改变的fri属性是属于book.prototype的。
var o2 = new book();
console.log(o1.fri == o2.fri)//flase
4.混合模式:组合使用构造函数模式和原型模式
将属性放入构造函数中;
将方法放入原型中;
每个实例都有自己的属性,同时又共享了方法,最大限度的节省了内存,而且还支持构造函数传参。
function book(name, page) {
this.name = name;
this.page = page;
}
book.prototype.look = function () {
console.log(this.name + '看书')
}
var o1 = new book('jav', 200);
o1.look();
var o2 = new book('javaaa', 300);
console.log(o2);
o2.look();
console.log(o1.look == o2.look);//true
5.json格式创建对象
var cup = {
name: '青花',
age: 2,
drink: function () {
console.log('heshui')
}
}
cup.drink();
console.log(cup.name);