- 组合使用构造函数模式和原型模式
构造函数模式用于定义实例属性,原型模式用于定义方法和共享的属性.
产生的结果是:每个实例都有自己的一份实例属性的副本,但同时又享有着对方法的引用.
function Peo(name,age) {
this.name = name;
this.age = age;
this.p = ["pingpang","teneis"];
}
Peo.prototype = {
constructor : Peo,
sayName : function () {
console.log(this.name);
}
};
let peo1 = new Peo("wys",21);
let peo2 = new Peo("qm",20);
peo1.p.pop();
console.log(peo1.p);
console.log(peo2.p);
console.log(peo1.sayName() === peo2.sayName());
对于上面的例子来说,如果仅仅使用原型模式,当调用了person1.p.pop()后,person2中的值也会发生变化.
- 寄生构造函数模式
与之前说的工厂模式一样,除了用new操作符并且把使用的包装函数叫做构造函数之外没啥差别
- 动态原型模式
通过检查某个应该存在的方法是否有效,来决定是否需要初始化原型
if(typeof this.sayName() != "function") {
Peo.prototype.sayName = function () {
console.log(this.name);
}
- 稳妥构造函数模式
可以在对象中添加私有属性,环境安全
网友评论