动态原型模式
动态原型模式结合使用构造器模式和原型模式,并且依据实际情况来决定是是否初始化原型中的方法。
function Person(name, age, score){
this.name = name;
this.age = age;
this.score = score;
if(typeof this.showScore !== 'function'){
Person.prototype.showScore = function(){
alert(this.name + '\'s score is ' + this.score);
}
}
}
var person1 = new Person('ZhangSan', 12, 100);
person1.showScore();
寄生构造函数模式
特殊情况使用,可以用来为对象重建构造函数。
构造函数在不返回值的情况下会默认返回新对象实例,而在构造函数的末尾使用return可以重写调用构造函数时返回的值。
function SpecialArray(){
var array = new Array();
//这一步我理解是将伪数组转为数组
array.push.apply(array, arguments);
array.toPipedString = function(){
return this.join('|');
}
return array;
}
var colors = new SpecialArray("red","yellow","blue");
console.log(colors.toPipedString());
这些例子都是在《javascript高级程序设计》中的案例,这个案例是创建具有额外方法的特殊数组。
测试了一下,使用这种模式创建的对象,原型指向的构造函数仍然是Array。
稳妥构造函数模式
稳妥构造函数不能使用this和new
function Person(name, age, score){
var obj = new Object();
obj.sayName = function(){
console.log(name);
}
return obj
}
var person1 = new Person('zhangsan', 12, 100)
person1.sayName()//”zhangsan“
console.log(person1.name)//undefined
稳妥构造函数的理解,参考博客
https://blog.csdn.net/maomaolaoshi/article/details/73928094