ES6 类的完美继承 extends


class通过extends关键字实现继承

class a {

constructor(x, y){

this.x = x;

this.y = y;

}

static print(){

console.log(‘打印中…’);

}

}

// b类继承a类

class b extends a{

constructor(x, y, z){

super(x, y);

this.z = z;

}

}

let c = new b();

b.print();

Object.getPrototypeOf(b) === a

  • super:调用父类的constructor里面的属性和方法(必须调用一次)

  • 父类的静态方法,也会被子类继承

  • 在子类使用this前必须先调用一次super父类

  • Object.getPrototypeOf方法可以用来从子类上获取父类

回到顶部 目录

super关键字


super实际就是:a.prototype.constructor.call(this)

class A {

constructor() {

console.log(new.target.name);

}

}

class B extends A {

constructor() {

super();

}

}

new A() // A

new B() // B

  • super()内部的this指向的调用者(子类)

  • super只能放在子类的constructor方法中,不然就报错

  • 如果super做为对象,在静态方法中,这时的super指向父类,而不是父类的原型

  • 类的方法就是静态方法带static的方法

  • 类继承中:静态方法对静态方法,普通方法对普通方法(super所在的地方)

  • 由于super使得this指向B的实例,所以super.valueOf()返回的是一个B的实例

类的prototype属性和__proto__属性


  • 子类的__proto__属性,表示构造函数的继承,总是指向父类的

  • 子类的prototype属性的__proto__属性,表示方法的继承,总是指向父类的prototype属性

class A {}

class B extends A {}

console.log(B.proto) // class A {}

console.log(B.prototype.proto == A.prototype) // true

回到顶部 目录

重写类的继承

class A {}

class B {}

// B的实例继承A的实例

Object.setPrototypeOf(B.prototype, A.prototype);

// B继承A的静态属性

Object.setPrototypeOf(B, A);

// Object.setPrototypeOf实现方法

Object.setPrototypeOf = function (obj, proto){

obj.protr = proto;

return obj;

}

原生构造函数的继承


ECMAScript的原生构造函数有:

  • Boolean()

  • Number()

  • String()

  • Array()

  • Date()

  • Function()

  • RegExp()

  • Error()

  • Object()

在ES6以前这些原生构造函数是无法继承的:

最后前端到底应该怎么学才好?

如果你打算靠自己摸索自学,那么你首先要了解学习前端的基本大纲,这是你将要学习的主要内容,理解以及掌握好这些内容,便可以找到一份初级的前端开发工作。你还需要有一套完整的前端学习教程,作为初学者最好的方式就是看视频教程学习,初学者容易理解接受。

不要选择买书学习,这样的方式没有几个人能学会,基本都是看不下去书,也看不懂书。如果喜欢看书的学弟,可以买一些经典的书籍作为辅助即可,主要还是以看教程为主。每天抽出固定几个小时学习,做好长期学习的准备。学习编程并不是每天光看视频,你学习编程最重要的目的是为了编写软件产品,提供给大众使用,所以用手写出代码实现功能才是我们要做的事情。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值