美文网首页让前端飞
js中call和原型链实现继承

js中call和原型链实现继承

作者: 一条逻辑线 | 来源:发表于2017-08-24 19:25 被阅读0次

1.首先创建一个由构造函数模拟出来的对象

function  Sport(){

this.name = name;

this.time= time;

Sport.prototype.sport = function(){

alert("跑步");

}

}

Sport是由一个关于运动的类(构造函数模拟类)

2.我们在创建一个玩的类

function  Paly(name,time,hobby){

this.hobby = hobby;

}

3.现在我们想让Play这个类继承自Sport这个父类的属性和方法,首先Sport中的属性值Paly可以通过call方法

让this指针指向发生改变,如下:

function Play (name,time,hobby){

this.hobby = hobby;

Sport.call(this,name,time);

}

var pl = new Play("运动",5,"长跑");

这样Sport中的this指针的指向就是调用Play这个对象了,而只需     对象名.属性名    就能获取到存放Sport类中的属性了但是Sport中存在原型中的方法这样是取不到的,即不可继承,那只有通过原型链的方式来实现继承Sport构造函数在创建时就生成了一个属于他的原型,并且在首次调用Sport时在该原型中添加了一个sport方法Play构造函数想要继承这个方法,通过自己实例化的对象去寻找原型调用这个sport是找不到的,因为sport方法不在Play所属的原型中所以找不到,那怎么才能找到呢?首先可以让Play构造函数指向他自己的原型改变成指向Sport类实例化的对象即让Sport类实例化的对象充当Play的原型

var sp = new Sport();

Play.prototype = sp;

这样就可以通过Sport实例化的对象去找到他的原型中的sport方法。但是这样Play中的原型相当于是Sport实例化的对象那他的constructor指向就是指的Sport这个构造函数了,而不再是Play构造函数。为了修改这个逻辑上的错误可以把Play构造函数在赋值回去即

Play.prototype = Play;

这样就可以通过pl.sport继承到Sport原型中方法啦,当然这个使用原型链层层向上找的结果,而属性值就完全可以通过call方法就能获取到了

相关文章

  • 2018-06-01 js模拟继承

    这篇主要讲了 构造函数实现继承 原型链实现继承 构造函数+原型链实现继承(两种) 1: call() apply(...

  • js中call和原型链实现继承

    1.首先创建一个由构造函数模拟出来的对象 function Sport(){ this.name = name; ...

  • js继承

    js继承js 继承-简书 原型链实现集继承 上面的代码实现原型链继承最重要的son.prototype=new f...

  • js实现继承的几种方式

    js实现继承有几种方式,这里我们主要探讨 原型链继承 构造继承 组合继承(原型链和构造继承组合到一块,使用原型链实...

  • js基础之实现继承的几种方式

    js 实现继承的方式有: 原型链继承; 构造函数继承; 组合继承(原型链继承 + 构造函数继承)(最常用);(原型...

  • js实现继承的几种方式

    如何实现继承? js中实现继承的方式主要是通过原型链完成的。了解原型链的相关信息可以点这里 javascript中...

  • JS的__proto__和prototype

    最近在回顾JS的原型和原型链的知识,熟悉JS的同学都知道JS的继承是靠原型链实现的,那跟原型链相关的属性__pro...

  • [读] JS中的call()和apply()方法

    JS中的call()和apply()方法 实现继承 多重继承

  • JS继承

    JS继承的几种实现方式 继承是指子类继承父类的属性和方法,要实现继承,首先我们需要有一个父类 原型链继承 原型链继...

  • 对象的继承实现

    继承实现:a. 构造函数继承call()apply()b. 原型链继承Student.prototype = ne...

网友评论

    本文标题:js中call和原型链实现继承

    本文链接:https://www.haomeiwen.com/subject/iagedxtx.html