动态原型模式、寄生构造函数模式和稳妥构造函数模式

动态原型模式

动态原型模式结合使用构造器模式和原型模式,并且依据实际情况来决定是是否初始化原型中的方法。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值