在ES2015中定义一个类,构造函数方法是什么以及为什么它是必不可少的
Defining a Class in ES2015, what is the constructor method and why is it essential?
我正在学习ES2015,但我并不完全了解课程的所有内容。据我了解,您定义了这样的类:
class Parent {
constructor() {
// ...
}
}
还有一个子类,如下所示:(其中必须调用 super() 才能最初从父类运行构造函数)。
class subClass extends Parent {
constructor(name, description, url) {
// subclass must call super to invoke the parent's constructor method
super();
}
}
构造函数方法到底是什么,为什么它很重要,为什么在创建子类的实例时需要调用父构造函数?
当您创建类的新实例时,将使用您传递的参数调用构造函数方法。在此函数中,放置任何代码来构造类的实例,例如初始化属性。
class Person{
constructor(name){
this.name = name;
}
sayHi(){
alert(`${this.name} says hello!`);
}
}
let person = new Person('Jerry');//this param will be send to the constructor method
person.sayHi();
此代码的结果将是一个警报,说"杰瑞说你好!
虽然,构造函数方法不是必需的。以下代码也可以工作。
class Person{
sayHi(){
alert("Someone says hello!");
}
}
let person = new Person();
person.sayHi();
如果您有子类,则可能需要调用父类的构造函数方法。这也不是必需的,但在大多数情况下会完成。
class Person{
constructor(name){
this.name = name;
}
sayHi(){
alert(`${this.name} says hello!`);
}
}
class SophisticatedPerson extends Person{
constructor(name){
super(name);//this will call the constructor method of the Person class
}
sayHi(){
alert(`${this.name} says: Top of the hat to you, sir!`);
}
oldSayHi(){
super.sayHi();//call sayHi of the Person class
}
}
let person = new SophisticatedPerson('Jerry');
person.sayHi();//calls the overidden sayHi method of SophisticatedPerson class
person.oldSayHi();//calls the oldSayHi of SophisticatedPerson class which calls sayHi of Person class
使用"super",您可以通过父类的"super.methodName()"通过"super.methodName()"调用构造函数,如上图所示。
额外通知:如果未在子类上提供构造函数方法,则将调用父构造函数方法。
构造
函数方法是在使用 new
关键字构造对象时调用的方法。它用于初始化对象的基本属性。
必须调用父构造函数的原因是(除了这是定义"语言规则"的方式这一简单事实之外)是需要允许父类进行初始化。
这些是许多 OOP 语言中相当基本的常见概念。
相关文章:
- 打破承诺链的好方法是什么
- 在JavaScript中拆分日期字符串的更好方法是什么
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- 基于窗口宽度jquery的函数的替代方法是什么
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- knex:根据结果创建数组的合适方法是什么
- 以编程方式填充组合框道场 (1.8) 的最佳方法是什么?
- node.js是否具有'match()'方法如果是,语法是什么
- 使用Modernizr检测移动设备最可靠的方法是什么
- 确定var是否是javascript中的elementFinder对象的方法是什么
- 用javascript修复这个JSON对象字符串最干净的方法是什么
- 让会话值可用于JavaScript的好方法是什么
- 从AngularJs获取谷歌地图对象的正确方法是什么
- 使用ReactJS和Flux架构从服务器获取数据的正确方法是什么
- 列出没有 mysql 的元素的最佳方法是什么
- 克服错误的更优雅的方法是什么:需要对象说明符.当通过JXA通过Messages发送SMS时,参数没有对象说明符
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- 在 Javascript 中实现解耦代码/回调的正确方法是什么?
- 使用Javascript,获取元素的方法是什么,基于打开和关闭标记之间的文本