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实际就是: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的实例
-
子类的__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以前这些原生构造函数是无法继承的:
最后前端到底应该怎么学才好?
如果你打算靠自己摸索自学,那么你首先要了解学习前端的基本大纲,这是你将要学习的主要内容,理解以及掌握好这些内容,便可以找到一份初级的前端开发工作。你还需要有一套完整的前端学习教程,作为初学者最好的方式就是看视频教程学习,初学者容易理解接受。
不要选择买书学习,这样的方式没有几个人能学会,基本都是看不下去书,也看不懂书。如果喜欢看书的学弟,可以买一些经典的书籍作为辅助即可,主要还是以看教程为主。每天抽出固定几个小时学习,做好长期学习的准备。学习编程并不是每天光看视频,你学习编程最重要的目的是为了编写软件产品,提供给大众使用,所以用手写出代码实现功能才是我们要做的事情。