jses6语法:class类 class继承 super关键字

更新日期: 2020-10-02阅读: 1.8k标签: super

一, 类的由来

es6提供了一个新语法就是class


二, class声明一个类

// 声明一个类
class Piont{ // Piont就是一个类  

}


1, 添加属性和方法

class Piont {
    // 构造函数
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }
	// 方法
    run(){
       console.log(1);
    }
}


2, 使用方式

var p = new Piont(‘刘德华‘,30);
p.run();
console.log(p.name);


3, 方法的写入

run(){
    console.log(1);
}

对象调用的属性和方法叫做成员属性和方法,有类直接调用的属性和方法叫静态属性和方法

静态的属性指的是Class本身不是定义在实列对象上的属性

class Foo {

}

Foo.pop = 1; // 给Foo这个类定义了一个静态属性
console.log(Foo.pop);


4, 内部添加静态属性

class Po{
static myP = 100; // 静态属性
constructor(){
    console.log(Po.myP);
}
}

var p1 = new Po();
p1.constructor; // 调用


5, 添加静态方法

class Foo{
    static po = 100; // 
    static classMethod(){
        return ‘hello‘;
    }
}


6, this和方法重名

class Foo {
    static bar() {
        this.baz()
    }
    static baz() {
        console.log(‘hello‘);
    }
    baz() {
        console.log(‘world‘);
    }
}

Foo.bar();
var f = new Foo();
f.baz();


7, 父类的静态方法可以被子类继承

class Foo {
static classMethod() {
    return ‘hello‘;
}
}
// 子类继承父类
class Bar extends Foo { // 子类继承父类

}
console.log(Bar.classMethod());


8, class继承

Class可以通过extends关键字实现继承,这比ES5通过修改原型链实现继承

class Point{

}
// 子类继承父类
class ColorPoint extends Point{

}

在ColorPoint内加上代码

class Point {
    constructor(x, y) {
        this.x = x;
        this.y = y;
    }
}
// 在ColorPoint内加上代码
class ColorPoint extends Point {
    constructor(x, y, color) {
        //  this.color = color; // 错误
        super(x, y); // 调用父类的constructor(x, y)
        this.color = color; //  正确的
    }

    toString() {
        return this.color + ‘ ‘ + super.toString;
        toString()
    }
}

let cp = new ColorPoint(20, 30, ‘green‘);

console.log(cp instanceof ColorPoint);// true
console.log(cp instanceof Point); //  true 

console.log(cp.x, cp.y, cp.color);


9, super关键字

既可以当做函数使用,也可以当做对象使用

当做函数使用的时候,代表的是父类的构造函数,es6要求,子类的构造函数必须执行一些super

class A{
    constructor(){
        console.log(new.target.name);
    }
}

class B extends A{
    constructor(){
        super();// 代表的是父类的构造函数 但是返回的是子类的实列,内部的this指向的是子类的实列
        // 相当于
        // A.prototype.constructor.call(this);
    }
}

console.log(new A()); //A
console.log(new B()); //B

super作为对象使用,在普通方法中,指向父类的原型对象,在静态方法中,指向的是父类

class A{
    p(){
        return 2;
    }
}
// 继承
class B extends A {

    constructor(){
        super();
        console.log(super.p()); // 2  
    }
}

let b = new B();

由于super指向父类的原型对象,所以定义在父类实列上的方法或者属性,是无法通过super调用

class A {
    constructor() {
        this.p = 2;
    }
}
// 继承
class B extends A {
    get m() {
        return super.p;
    }
}

let b = new B();
console.log(b.m);

链接: https://fly63.com/article/detial/9808

ES6 类继承 和 super的使用

ES6中继承的子类中,如果使用构造函数constructor()那么就必须使用 super()方法初始化,这样下面才可以调用this关键字。super()只能用在子类的构造函数之中,用在其他地方就会报错。

谈谈super(props) 的重要性

我听说 Hooks 最近很火。讽刺的是,我想用一些关于 class 组件的有趣故事来开始这篇文章。你觉得如何?本文中这些坑对于你正常使用 React 并不是很重要。 但是假如你想更深入的了解它的运作方式,就会发现实际上它们很有趣。

js中的super的使用

super()相当于Parent.prototype.constructor.call(this)ES5的继承,实质上是先创造子类的实例对象this,然后再将父类的方法添加到this上(Parent.call(this)). ES6的继承

ES6 class继承与super关键词深入探索

在ES6版本之前,JavaScript语言并没有传统面向对象语言的class写法,ES6发布之后,Babel迅速跟进,广大开发者也很快喜欢上ES6带来的新的编程体验。当然,在这门“混乱”而又精妙的语言中,许多每天出现我们视野中的东西却常常被我们忽略。

为什么我们要写 super(props) ?

据说 Hooks 势头正盛,不过我还是想略带调侃地从 class 的有趣之处开始这篇博客。可还行?这些梗对于使用 React 输出产品并不重要

es6中class类、super和estends关键词

JavaScript 语言在ES6中引入了 class 这一个关键字,在学习面试的中,经常会遇到面试官问到谈一下你对 ES6 中class的认识,同时我们的代码中如何去使用这个关键字,使用这个关键字需要注意什么,这篇来总结一下相关知识点。

面试官:this和super有什么区别?this能调用到父类吗?

this 和 super 都是 Java 中的关键字,都起指代作用,当显示使用它们时,都需要将它们放在方法的首行(否则编译器会报错)。this 表示当前对象,super 用来指代父类对象

ES6中class方法及super关键字

记录下class中的原型,实例,super之间的关系,构造器中的this指向实例对象,在构造函数上定义的属性和方法相当于定义在类实例上的,而不是原型对象上

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!