JavaScript类继承 、构造函数继承,以及call、apply、bind 区别

本文详细介绍了ES6中的类语法,包括如何声明类以及类的继承。强调了在子类构造函数中需先调用`super`才能使用`this`的关键点。同时,对比了类继承与传统的构造函数继承,解释了`call`、`apply`和`bind`在修改`this`指向上的差异。文章深入探讨了JavaScript中的原型链,以及如何通过原型链实现方法的继承。
摘要由CSDN通过智能技术生成

 类:

一种有共同特性的事物的集合,是一个较为抽象的概念。比如人类,指一个范围;

类的声明

在ES6中可以使用class 关键字定义类,class可以被看做是一个语法糖;

 

 注意在类的内部默认是使用严格模式;

类的继承

Class通过 extends 关键字实现继承。

 

 如果只需继承父类的方法则不需要添加constructor。

在子类的 constructor 方法中,只有调用 super 之后,才可以使用 this 关键字,否则会报错。

super负责初始化this.相当于ES5中的call和apply方法

构造函数继承

子类继承父类,通过call/apply改变父类构造函数的this指向

 这里只实现了部分继承,仅继承了父类的属性,并没有继承父类的原型对象上的方法

要继承父类的方法需要借助原型链实现继承

让子构造函数的 prototype 等于父 构造函数实例出来的一个对象 

这样就可以获取到 父构造函数的 方法  在修改时也不会  改变父构造函数的 prototype

但是上面这一步相当于  把 子构造函数的 prototype 全部修改赋值  

子构造函数 内已经没有了 constructor  所以我们要重新给他创造一个constructor

call()、apply()、bind() 的用法与区别

这三种方法都可以修改this指向

这三个函数的第一个参数都是 this 的指向对象

call

第一个参数是 this 的指向对象

第二个,第三个参数允许是任何类型,直接写入,用逗号隔开

 

apply

第一个参数是 this 的指向对象

第二个参数是  必须是一个数组   存着数组的变量也可以

所以 apply方法一般和数组结合使用

 

这里封装了一个求和函数

利用apply方法 修改了fun()函数内的this指向

bind

第一个参数是 this 的指向对象

第二个,第三个参数允许是任何类型,直接写入,用逗号隔开

bind方法与call,apply的区别是bind不会调用函数,只修改this指向

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值