JS继承实例讲解之寄生式继承
程序员文章站
2023-11-15 23:04:28
一听到“寄生式继承”这个名词很容易产生畏难感,这是个什么东东呢?别急,本篇文章将尝试用通俗易懂的方式阐述js中的这种继承方式。
一、一个例子
我们先...
一听到“寄生式继承”这个名词很容易产生畏难感,这是个什么东东呢?别急,本篇文章将尝试用通俗易懂的方式阐述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'); };
创建一个实例后,该实例就拥有该属性。
下一篇: Python 正则表达式(转义问题)