ES6中class方法及super关键字

javascript 文章 2022-07-21 15:40 534 0 全屏看文

AI助手支持GPT4.0

ES6 class中的一些问题

记录下class中的原型,实例,super之间的关系

//父类
class Dad {
    constructor(x, y) {
        this.x = 5;
        this.y = 1;
        this.state = 789
    }

    static x = 521

    state1 = 666

    say() {
        console.log("父类bark");
    }
    talk = () => {
        console.log("父类talk");
    }

    static speak() {
        console.log("父类speak");
        console.log(this.state);
    }
    speak(){
        console.log("父类不会speak");
    }
}
//子类
class Child extends Dad {
    constructor() {
        super()
        this.x = 987
        this.toString = this.toString.bind(this)
    }

    state = {}

    toString() {
        return '(' + this.x + ', ' + this.y + ')';
    }

    say = () => {
        super.say();
        console.log("子类bark");
        console.log(super.x);
    }

    talk = () => {
        super.talk()
        console.log("子类talk");
    }

    static speak() {
        super.speak()
        console.log("子类speak");
        console.log(super.x);
    }

}

console.log(new Child().x); // 输出987
console.log(new Child().y); // 输出1

new Child().say(); // 输出 父类bark  子类bark undefined
new Child().talk(); // 报错 super.talk is not a function

Child.speak(); // 父类speak undefined 子类speak 521
  1. 构造器中的this指向实例对象,在构造函数上定义的属性和方法相当于定义在类实例上的,而不是原型对象上

  2. toString方法是挂载到原型上的,toString1是挂载到每个实例上的

  3. this.toString.bind(this),前面的this是不确定的,取决于调用方式;
    后面的this指实例对象,这行代码目的是为了固定toString方法的this为实例对象,避免函数赋值给变量时this丢失

  4. super关键字用于访问和调用一个对象的父对象上的函数

  5. super作为函数使用,调用的是父类的构造函数,而其中的this指向子类自己(用父类的方法操作自己的东西)

  6. super 作为对象时,在普通方法中,指向父类的原型对象(只能访问原型上的函数,无法访问属性);在静态方法中,指向父类本身(调用的是父类的静态方法或属性),但是this指向子类。

-EOF-

AI助手支持GPT4.0


国内超级便宜服务器

摸鱼人热门新闻聚合

钻级赞助商 我要加入

开发者在线工具

第三方支付技术请加QQ群

相关文章
可以替换jQuery的httml5原生脚本
H5获取经纬度代码
从零开始制作【立体键盘】,画UI免写CSS,【盲打练习】的交互逻辑只用了10来行表达式!
微信小程序使用echarts/数据刷新重新渲染/图层遮挡问题
Object.defineProperty也能监听数组变化?
随便看看
怎么添加小程序支付功能? 4516
教育科技公司申请微信支付被拒绝? 4798
微信公众号免300认证教程 5892
小程序已经上线,作为管理员无法在小程序数据助手查看数据? 5299
小程序广告组件通过审核,但是小程序内没有显示广告? 5067
企业微信通讯录账号被管理员误/恶意删除,怎么办? 9568
问题? 9048
如何快速搭建抽奖助手小程序(无需代码知识) 6177
许涛 大哥在吗, 要解冻小程序的时候提示信息主体不一致, 能帮忙看下吗? 7472
小程序搜一搜全称搜索不显示 麻烦解决一下!谢谢 6793