Rumah  >  Artikel  >  hujung hadapan web  >  JS继承之寄生式继承

JS继承之寄生式继承

小云云
小云云asal
2018-03-07 10:50:582113semak imbas

一听到“寄生式继承”这个名词很容易产生畏难感,这是个什么东东呢?别急,本篇文章将尝试用通俗易懂的方式阐述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');
    };

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

相关推荐:

几种js继承的式分享

js继承 Base类的源码解析_js面向对象

js继承的实现代码_javascript技巧

Atas ialah kandungan terperinci JS继承之寄生式继承. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn