【Es6】关键字之 super、static、new.target

本文详细介绍了ES6中的`super`、`static`和`new.target`关键字。`super`在子类中用于调用父类的方法和属性,必须在子类构造函数中调用以初始化`this`对象。`static`关键字用于定义不会被实例继承的静态方法,这些方法直接通过类名调用。`new.target`则用来检测函数是否通过`new`运算符调用,提供对构造函数引用的能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.super关键字

 2.static关键字

this问题

3.new.target 关键字 


ES6引入了Class(类)这个概念,作为对象的模板,通过class关键字,可以定义类。基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法

1.super关键字

super用在调用的时候有两种情况:

第一种情况,super作为函数调用时,代表父类的构造函数。 第二种情况,super作为对象时,在普通方法中,指向父类的原型对象;在静态方法中,指向父类。

class Person {
  constructor (name) {
    this.name = name;
  }
  height(){
      console.log(1);
  }
  static weight(){
      console.log(2);
  }
}
class Student extends Person {
  constructor (name, age) {
    super();  //代表父类的构造函数
    this.age = age;
  }
  height(){
      super.height(); //指向父类的原型对象
  }
  static weight(){
      super.weight(); //指向父类
  }
}

 如果子类调用constructor,那么子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。如果不调用super方法,子类就得不到this对象。

总结下:

super 关键字用于调用一个对象的父对象上的函数。
super.prop 和 super[expr] 表达式在类 和 对象字面量 任何 方法定义 中都是有效的。
在构造函数中使用时,super关键字单独出现,必须在可以使用this关键字之前使用。此关键字也可用于调用父对象上的函数。

 2.static关键字

类相当于实例的原型, 所有在类中定义的方法, 都会被实例继承。 如果在一个方法前, 加上static关键字, 就表示该方法不会被实例继承, 而是直接通过类来调用, 这就称为“ 静态方法”。

静态方法调用直接在类上进行,而在类的实例上不可被调用。

静态方法通常用于创建 实用/工具 函数。

 <script>

   // 声明类
   class Boy {

      //定义属性
      info = '西邮学子';

      // 定义方法
      static say() {
        console.log('我是,' + this.info);  // 这里的this是类而不是实例
      }
    }

    // 实例化类
    let b = new Boy;
    // 调用方法
    b.say();       // b.say is not a function
  
    Boy.say();     //  我是,undefined

</script>

凡是被static修饰的属性和方法都是静态方法和属性,只能被类名调用,不能被实例化对象调用.同时也不能被子类继承,换句话说它属于当前这个类的。extends的主要用于子类继承父类,继承之后子类拥有父类的的所有方法包括,静态方法和属性除外.

this问题

   // 声明类
   class Boy {
     
      // 定义方法
      static say() {
        console.log(this);
      }
    }
    // 实例化类
    let b = new Boy;

    // 调用方法      
    Boy.say();  

 

 如果静态方法包含this关键字,这个this指的是类,而不是实例。

3.new.target 关键字 

 new.target属性允许你检测函数或构造方法是否通过是通过new运算符被调用的。在通过new运算符被初始化的函数或构造方法中,new.target返回一个指向构造方法或函数的引用。在普通的函数调用中,new.target 的值是undefined。

new.target的功能就是用来检测函数的调用是不是通过 new 去创建一个新对象的,而且new.target返回的是一个指向函数的引用,也就是说我们能够确定是哪个函数进行了new操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿昊在

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值