寄生构造函数模式创建对象

Posted rencoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了寄生构造函数模式创建对象相关的知识,希望对你有一定的参考价值。

这个模式可以在特殊的情况下用来为对象创建构造函数

例子一

假设我们想创建一个具有额外方法的特殊数组。

由于不能直接修改Array构造函数(此为使用寄生构造函数模式的原因)

function SpecialArray() {

    // 创建数组
    var values = new Array();

    // 添加值
    // values.push.apply(values, arguments);
    values.push(...arguments);

    // 添加方法
    values.toPipedString = function() {
        return this.join("|");
    };

    // 返回数组
    return values;
}

var colors = new SpecialArray("red""blue""green");
console.log(colors.toPipedString()); // console: "red|blue|green"
例子二

原始库对象的方法不好用, 我们想创建具有更简便方法的对象

function SpecialRapheal(id{

    // 创建Raphael实例
    var r = Raphael(id);

    // 添加方法
    r.line = function(obj{
        return this.path(obj.path)
            .attr({"stroke": obj.strokeColor, "stroke-width": obj.strokeWidth})
            .translate(obj.x || 0, obj.y || 0);
    };

    r.rec = function(obj{
        return this.path(obj.path)
            .attr({"stroke": obj.strokeColor, "fill": obj.fillColor})
            .translate(obj.x || 0, obj.y || 0);
    };

    r.cir = function(obj{
        return this.circle(obj.cx, obj.cy, obj.r)
            .attr({"stroke": obj.strokeColor, "stroke-width": obj.strokeWidth, "fill": obj.fillColor})
            .translate(obj.x || 0, obj.y || 0);
    }

    return r;
}

以上是关于寄生构造函数模式创建对象的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript之面向对象学习七(动态原型模式和寄生构造函数模式创建自定义类型)

JavaScript 对象

原型模式

寄生式继承

JavaScript ----------------- 寄生式继承

面向对象的程序设计 - 创建对象