第二课:继承(2021/4/15)

本文详细介绍了JavaScript中的组合继承,通过构造函数和原型对象模拟实现继承。讲解了函数call()的作用,如何借用构造函数继承父类型属性,并展示了如何在子构造函数中继承父构造函数的原型链上的方法。同时,文章还讨论了如何通过创建新的原型对象来保持原型链的完整,确保方法查找的正确性。
摘要由CSDN通过智能技术生成

背景:ES6之前并没有给我们提供extends继承。我们可以通过构造函数+原型对象模拟实现继承,被称为组合继承.

一、函数call()

调用这个函数,并且修改函数运行时的this指向

fun.call(thisArg,arg1,arg2,...)
thisArg:当前调用函数this的指向对象
arg1,arg2:传递的其他参数

第一个作用:可以直接调用函数fun.call()
第二个作用:修改this的指向

// fun.call(o);

二、借用构造函数继承父类型属性

// 借用父构造函数继承属性
// 1.父构造函数
function Father(uname,age){
        // this 指向父构造函数的对象实例
        this.uname = uname;
        this.age = age;
}

// 2.子构造函数
function Son(uname,age,score){
        // this 指向子构造函数的对象实例
        Father.call(this,uname,age);
        this.score = score;
}

var son = new Son('刘德华',10,100);
console.log(son)

子构造函数如何继承父构造函数的原型链上的公共方法呢?(组合继承)

在这里插入图片描述

Father.prototype.money = function(){
        console.log(100000);
}

// 通过创建一个新的内存空间并指向到Son的原型对象即可 (新的父构造函数实例对象不会占用原先的父构造函数的同一内存的空间,而是新开辟一个内存空间

Son.prototype = new Father();

// 但是new Father() 是一个对象{},对象会覆盖子构造函数的原先的原形对象,需要指回原先的Son

 Son.prototype.constructor = Son;

注:如此绑定了之后,如果son实例和son的原型链上无money()这个方法的话,会依次一直往上面的原型链去找,直至找到这个方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值