最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

JS继承之寄生式继承

来源:动视网 责编:小采 时间:2020-11-27 20:01:48
文档

JS继承之寄生式继承

JS继承之寄生式继承:一听到寄生式继承这个名词很容易产生畏难感,这是个什么东东呢?别急,本篇文章将尝试用通俗易懂的方式阐述JS中的这种继承方式,希望能帮助到大家。一、一个例子我们先定义一个空函数,形参是original,就像下面这样:function createAnother(
推荐度:
导读JS继承之寄生式继承:一听到寄生式继承这个名词很容易产生畏难感,这是个什么东东呢?别急,本篇文章将尝试用通俗易懂的方式阐述JS中的这种继承方式,希望能帮助到大家。一、一个例子我们先定义一个空函数,形参是original,就像下面这样:function createAnother(

一听到“寄生式继承”这个名词很容易产生畏难感,这是个什么东东呢?别急,本篇文章将尝试用通俗易懂的方式阐述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继承之寄生式继承:一听到寄生式继承这个名词很容易产生畏难感,这是个什么东东呢?别急,本篇文章将尝试用通俗易懂的方式阐述JS中的这种继承方式,希望能帮助到大家。一、一个例子我们先定义一个空函数,形参是original,就像下面这样:function createAnother(
推荐度:
标签: js 寄生 继承
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top