JS高级程序设计三6.2,本文仅作书签摘要用。
1、工厂模式
优:减少重复代码
缺:没办法判断对象类型
2、构造函数
constructor – 每个对象都有构造函数属性
与工厂模式区别
1、没有显示创建对象
2、属性方法赋值给this
3、无return
都是new做的事。
优缺点
缺:
1、每个方法在每个实例上都要重新创建一遍。不同实例上的同名函数实际上是不同的。
2、优化后的全局函数只能被某个对象调用。
3、原型模式
prototype – 每个函数都有的原型属性
实例共享属性和方法
Parent.prototype.isPrototypeof(son1);
Object.getPrototype(son1);
son1.hasOwnProperty('name');// in
是否可枚举:Object.getOwnPropertyNames()/Object.keys();// 都在实例上
是否在原型上:in/son1.hasOwnProperty('name');
重写原型链
var Parent = function (){};
var p1 = new Parent();
Parent.prototype = {
}
var P2 = new Parent();
p1 instanceof Parent; // false
p2 instanceof Parent; // true
最新原型对象
之前原型对象
constructor属性,以及该属性的[[enumerable]]特性
可在原生对象原型中使用
优缺点
缺点:共享属性中引用类型不方便
4、构造函数和原型模式
最多的方式
优缺点
优点
1、实例属性和共享属性,最大程度节省内存。
2、支持向构造函数传递参数。
5、动态原型模式
调用构造函数时执行,不能再使用对象字面量重写原型。
6、寄生构造函数模式
实现上同工厂模式
作用:在原生类型(如Array)上创建额外方法。
优缺点
缺点:无法通过instanceof 确定对象类型
function SetNewArray() {
var newArray = new Array();
newArray.sayHi = function () {
console.info('say hi!');
};
return newArray;
}
var cc = new SetNewArray();
cc instanceof SetNewArray // false
7、稳妥构造函数模式
没有公共属性(只能通过方法访问属性),不使用this。
与寄生构造函数模式区别:不用new 调用构造函数