原型继承与属性拷贝的混合应用

对于继承应用来说,主要目标就是将一些现有的功能归为己有。也就是说,我们在新建一个对象时,通常首先应该继承与现有对象,然后再为其添加额外的方法和属性。具体而言就是:

  • 使用原型继承的方式克隆现存对象。
  • 而对于其他对象使用属性拷贝的方式
function objectPlus(o,stuff){
    var n;
    function F(){}
    F.prototype=o;
    n = new F();
    n.uber=o;

    for (var i in stuff){
       n[i] = stuff[i];
    }
    return n;
}

这个函数接受两个参数,其中对象o用于继承,而另外一个对象stuff则用于拷贝方法与属性。接下来我们看看实际应用。首先,需要一个基本对象shape:

var shape={
    name:'shape',
    toString:function(){return this.name;}
}

接着再创建一个继承于shape的2D对象,并为其添加更多的属性。这些额外的属性由一个用文本标识法所创建的匿名对象提供。

var twoDee = objectPlus(shape,{
    name:'2D shape',
    toString:function(){return this.uber.toString()+', '+this.name;}
});

现在,我们来创建一个继承于2D对象的triangle对象,并为其添加一些额外的属性。

var triangle = objectPlus(twoDee,{
    name:'Triangle',
    getArea:function(){return this.side*this.height/2;},
    side:0,
    height:0
});

创建一个具体的triangle对象my,并自定义其部分属性:

 

posted on 2015-02-05 10:35  凡一二三  阅读(390)  评论(0编辑  收藏  举报