当前位置: 移动技术网 > IT编程>开发语言>JavaScript > JS继承实例讲解之寄生式继承

JS继承实例讲解之寄生式继承

2019年03月20日  | 移动技术网IT编程  | 我要评论

一听到“寄生式继承”这个名词很容易产生畏难感,这是个什么东东呢?别急,本篇文章将尝试用通俗易懂的方式阐述js中的这种继承方式。


一、一个例子

我们先定义一个空函数,形参是original,就像下面这样:

function createanother(original){
}

在该函数中创建一个新对象clone:

function createanother(original){
    var clone=object.create(original);
}

给clone对象增加属性sayhi,sayhi属性是一个函数:

function createanother(original){
    var clone=object.create(original);
    clone.sayhi=function(){
        alert('hi');
    };
}

最后,返回clone对象:

function createanother(original){
    var clone=object.create(original);
    clone.sayhi=function(){
        alert('hi');
    };
    return clone;
}

假设我们有这样一个对象:

var person={
    name:'nicholas',
    friends:['shelby','court','van']
};

将以上对象作为实参传入我们的函数运行:

var anotherperson=createanother(person);
anotherperson.sayhi();

运行结果是:将弹出’hi’的窗口。

二、疑点:该方式与与原型式继承object.create(o)有何区别?

我们看到,函数createanother有这样一句:

var clone=object.create(original);

这不就是原型式继承吗?

的确,这里确实在内部使用了原型式继承的方法,最后返回的就是clone对象。不过还是与原型式继承有点区别:

原型式继承继承了原对象的属性,新对象并没有新的额外属性;寄生式继承在内部就可以给新对象增加属性,新对象除了拥有原对象的属性,还拥有内部增加的属性。

以上例来说,相比于原型式继承,多出的关键语句:

    clone.sayhi=function(){
        alert('hi');
    };

创建一个实例后,该实例就拥有该属性。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网