函数创建对象的方法
工厂模式
1 | function createPerson(name) { |
缺点:解决不了对象识别问题,所有实例指向Object。
构造函数模式
1 | function Person(name,age,job){ |
优点:
优点:实例可以识别为一个特定的类型
缺点:每个方法都要在实例上重新创建
优化构造函数模式
1 | function Person(name,age,job){ |
优点:解决了重复创建的问题。
缺点:定义了多个全局变量,没有封装可言。
原型模式
1 | function Person(name,age,job){ |
优点:方法不会重建
缺点:所有属性和方法都能共享,不能初始化参数
原型模式优化
1 | function Person(name,age,job){ |
优点:封装性更好了点
缺点:原型的缺点+constructor
原型模式优化
1 | function Person(name,age,job){ |
优点:constructor有了
缺点:原型的缺点
组合使用构造函数模式和原型模式
1 | function Person(name) { |
优点:每一个实例都有自己的一份实例属性的副本,又有对方法的引用。节省了内存。
缺点:封装性还可以做到更好?(本人觉得这个挺ok的)
动态原型模式
1 | function Person(name) { |
不能在使用动态原型模式时,使用对象字面量重写原型。
寄生构造函数模式
1 | function Person(name) { |
不能用instanceof操作符判断
稳妥构造函数模式
稳妥对象:指没有公共属性,而且其方法也不引用this属性。
与寄生构造模式的不同是:
1)新创建的对象不使用this
2)不使用new构造符调用构造函数1
2
3
4
5
6
7
8
9
10
11
12function person(name){
var o = new Object();
o.sayName = function(){
console.log(name);
};
return o;
}
var person1 = person('kevin');
person1.sayName(); // kevin
person1.name = "daisy";
person1.sayName(); // kevin
console.log(person1.name); // daisy
这种模式也不能使用instanceof。
补充
语法结构和Object.create()创建
1 | var a = {a: 1}; |
class关键字创建
1 | ; |
参考资料:
本文结束啦感谢您的阅读