首页 > 代码库 > 组合使用构造函数模式和动态原型模式、寄生构造函数模式(创建具有额外方法的特殊数组)

组合使用构造函数模式和动态原型模式、寄生构造函数模式(创建具有额外方法的特殊数组)

function Bird(name, age) {
    this.name = name;
    this.age = age;
    this.sons = ["Tom", "John"];
    //在sayName()方法不存在的情况下,添加到原型中
    if (typeof this.sayName != "function") {
        Bird.prototype.sayname = function() {
            console.log(this.name);
        };
    }
}
/*
使用动态原型模式时,不能使用对象字面量重写原型,如果在已经创建了实例情况下重写原型,就会出现上一篇文章中提到过的错误。
*/
function SpeArray() {
    var values = new Array();//创建数组
    values.push.apply(values, arguments);//添加值
    values.toPipedString = function() {
        return this.join("|"):
    };
    return values;//返回数组
}
var colors = new SpeArray("red", "blue", "green");
console.log(colors.toPipedString());
//当然在此不能直接修改Array构造函数,且创建一个有特殊方法的数组
//根据此原理可以设计自己的“栈”、“队列”等特殊数据结构。


组合使用构造函数模式和动态原型模式、寄生构造函数模式(创建具有额外方法的特殊数组)