当前位置: 首页 > wzjs >正文

网站开发 数字证书深圳网络推广网站

网站开发 数字证书,深圳网络推广网站,关键词app,手机小游戏网站在 ES6 的 class 中,super 关键字的行为在 构造函数 和 非构造函数(普通方法) 中有显著区别,主要体现在以下方面: 1. 构造函数中的 super 行为规则 必须显式调用: 在子类的构造函数中,必须先调…

在 ES6 的 class 中,super 关键字的行为在 构造函数非构造函数(普通方法) 中有显著区别,主要体现在以下方面:


1. 构造函数中的 super

行为规则
  1. 必须显式调用
    在子类的构造函数中,必须先调用 super(),才能使用 this。否则会抛出错误:

    class Child extends Parent {constructor() {this.name = "Alice"; // ❌ 错误:Must call super constructor in derived classsuper();}
    }
    
  2. super 作为函数调用
    super() 的作用是调用父类的构造函数,并初始化子类实例的 this

    • 参数需传递给父类构造函数。
    • 相当于 Parent.prototype.constructor.call(this, ...args)
  3. 调用顺序
    super() 必须位于构造函数的最顶部(在访问 this 之前)。

示例
class Parent {constructor(name) {this.name = name;}
}class Child extends Parent {constructor(name, age) {super(name); // ✅ 必须先调用 super()this.age = age;}
}const child = new Child("Alice", 10);
console.log(child.name); // "Alice"
console.log(child.age);  // 10

2. 非构造函数中的 super(普通方法)

行为规则
  1. super 作为对象使用
    在普通方法中,super 指向 父类原型(Parent.prototype),用于调用父类方法。

    • super.method() 等价于 Parent.prototype.method.call(this)
  2. 可调用父类原型方法
    通过 super 可以访问父类原型上定义的方法,但无法直接访问父类实例属性。

  3. 无需强制调用顺序
    可以在方法内任意位置使用 super,无需在访问 this 之前调用。

示例
class Parent {sayHello() {console.log("Hello from Parent");}
}class Child extends Parent {sayHello() {super.sayHello(); // ✅ 调用父类方法console.log("Hello from Child");}
}const child = new Child();
child.sayHello(); 
// 输出:
// "Hello from Parent"
// "Hello from Child"

关键区别总结

特性构造函数中的 super非构造函数中的 super
调用形式必须作为函数调用(super()作为对象调用(super.method()
必要性必须显式调用,否则报错可选调用(根据需要)
作用初始化 this,继承父类实例属性调用父类原型方法
访问 this 的时机必须在 super() 调用之后可直接使用 this(无需前置条件)
静态方法中的行为无(静态方法无构造函数)super 指向父类(而非父类原型)

静态方法中的 super

在静态方法中,super 指向 父类本身,而非父类原型:

class Parent {static staticMethod() {console.log("Parent static method");}
}class Child extends Parent {static staticMethod() {super.staticMethod(); // 调用父类的静态方法console.log("Child static method");}
}Child.staticMethod(); 
// 输出:
// "Parent static method"
// "Child static method"

常见错误场景

1. 构造函数中遗漏 super
class Child extends Parent {constructor() { // ❌ 未调用 super(),抛出错误}
}
2. 在非构造函数中误用 super()
class Child extends Parent {method() {super(); // ❌ 语法错误:'super' keyword unexpected here}
}
3. 错误访问父类实例属性
class Parent {constructor() {this.value = 42;}
}class Child extends Parent {getValue() {return super.value; // ❌ 无法通过 super 访问父类实例属性(返回 undefined)}
}const child = new Child();
console.log(child.getValue()); // undefined

总结

  • 构造函数中的 super
    强制调用,用于初始化 this,确保父类实例属性正确继承。
  • 非构造函数中的 super
    用于调用父类原型方法,无需强制顺序,但需注意 super 的指向。
  • 静态方法中的 super
    指向父类本身,用于调用父类静态方法。
http://www.dtcms.com/wzjs/60515.html

相关文章:

  • 就是做网站的.....做营销怎样才能吸引客户
  • 做黄色网站会受到什么惩罚专业seo外包
  • 榆林市建设局网站百度竞价是什么意思
  • 北京赛车网站开发公司网站开发北京公司
  • 门户网站改版搜一搜百度
  • 公司里面php开发一个网站的流程网络营销软件推广
  • 中小企业门户网站的建设方案b站黄页推广
  • 河北网站制作报价重庆seo哪个强
  • 上海营销型网站软文是什么
  • 企石做网站企业站seo外包
  • 长沙网站建设设计有哪些可以推广的平台
  • 常州哪些网站公司做的好处什么都能搜的浏览器
  • 网站建设要经历哪些步骤指数基金定投技巧
  • 好学校平台网站模板百度推广靠谱吗
  • 深圳做网站哪家好公司培训
  • vs网站开发实例百度精准引流推广
  • wordpress文章只允许投稿者浏览重庆seo网站推广优化
  • 广饶网站制作seo怎么做推广
  • 模板网站有利于做seo吗网站推广策划案
  • 泰州做网站价格sem是什么意思中文
  • 建设企业网站是静态还是动态好中国十大互联网公司排名
  • 网站安全建设模板下载培训学校管理制度大全
  • 基于jsp的网站开发的文献短视频怎么赚钱
  • 建网站有哪些文件夹淘宝热搜关键词排行榜
  • seo资源青岛seo推广
  • 学做分类网站电商线上推广渠道
  • 昆明网站代理企业网络营销青岛
  • 中山精品网站建设策划关于进一步优化
  • 网站建设 好的公司南宁seo排名首页
  • 做网站要注意哪些问题专业网站优化排名