码迷,mamicode.com
首页 > 编程语言 > 详细

javascript --- 原型继承与属性拷贝的综合应用

时间:2016-09-05 13:39:50      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

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

对此,我们可以通过一个函数调用来完成。

具体而言就是:

  1. 使用原型继承的方式,将一个已有对象设置成新对象的原型。

  2. 新建一个对象后,将另一个已有对象的属性拷贝过来。

function objectPlus(o, stuff){
    var n;
    function F(){};
    F.prototype = o.prototype;
    n = new F();
    n.uber = o;

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

这个函数接收两个参数o, stuff; 对象o用于继承,对象stuff用来拷贝方法和属性。我们来看一下实际应用:

首先,需要一个基本对象shape:

var pepole = {
    name: ‘Anna‘,
    toString: function(){
        return this.name;
    }
}

 

接着,创建一个继承于shape的对象,并为其添加额外的属性与方法。这些属性与方法与一个文本标识法创建的匿名对象提供:

var her = objectPlus(pepole,{
    name: ‘Jock‘,
    toString:function(){
        return this.usber.toString() + ‘,‘ +this.name;
    }
})

接下来,我们继续来创建一个继承her对象的his对象,也为其添加一些属性和方法:

var his = ObjectPlus(her, {
    name: ‘lus‘,
    getArea: function(){
        return this.side * this.height / 2;
    },
    side: 0,
    height: 0 
})

下面我们来测试一下:

var my = objectPublic(her, {
   side:4,
   height:4
})
my.getArea(); // 8
my.toString(); // Anna, Jock, Lus, Lus

这里的不同之处在于,执行toString()函数时,his的name属性会被执行两次,这是因为我们在实例化my的时候继承与her的,her自己又有name属性,所以这里又多了一层继承关系。

我们也可以给该实例一个新的name属性:

objectPuls(her, {
    side: 4,
    height: 4,
    name: ‘jiao‘
}).toString();
// Anna, Jock, Lus, jiao

 

对不住了,这两天有点懒,玩了个游戏,怀怀旧,来个A哥镇楼:╮(╯▽╰)╭╮(╯▽╰)╭╮(╯▽╰)╭

技术分享

 

javascript --- 原型继承与属性拷贝的综合应用

标签:

原文地址:http://www.cnblogs.com/beyond-succeed/p/5841769.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!