2016-03-07 54 views
2

我正在学习ES2015的过程中,并没有完全理解有关类的所有内容。据我了解,你像这样定义一个类:在ES2015中定义一个类,什么是构造函数方法,为什么它很重要?

class Parent { 
    constructor() { 
    // ... 
    } 
} 

和这样的一个子类: (其中超()必须被调用,以最初运行从父类的构造函数)。

class subClass extends Parent { 
    constructor(name, description, url) { 
    // subclass must call super to invoke the parent's constructor method 
    super(); 
    } 
} 

到底是什么类的构造方法,它为什么重要?为什么一个家长的构造需要创建一个子类的实例时被调用?

回答

2

当您创建一个类的新实例时,构造函数方法将与您传递的参数一起被调用。在这个函数中,你可以使用任何代码来构造你的类的实例,比如初始化属性。

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.methodName()”。

特别提示:如果您未在您的子类中提供构造函数方法,则会调用父构造函数方法。

2

构造函数方法是当您使用关键字new构造对象时调用的方法。它用于初始化对象的基本属性。

您必须调用父构造函数的原因(除了简单的事实,即“语言规则”是如何定义的),您需要允许父类进行初始化。

这些是许多OOP语言中相当基本的常见概念。

相关问题