【发布时间】:2017-04-21 09:59:05
【问题描述】:
我一直在使用 React js 进行编码。我已经读过在 ES6 类中访问“this”,我们需要首先调用 super(props),我想知道为什么会这样。我发现的答案主要是关于 Javascript 无法知道“this”是什么,除非超类叫做。我想知道这意味着什么,因为在构造函数之外,“this”被识别,我们不会每次都调用 super(props)。
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = { /* initial state */ };
}
}
【问题讨论】:
-
我认为,如果我错了,任何人都可以纠正我,在调用 super() 之前,不会创建实例,这意味着在此之前 this 不会指向任何东西
-
我见过在 super({properties}) 之前使用 'this.{property}' 的代码。是不是在这种情况下使用了父级的属性?
-
你必须调用 super()
-
@U.P ,如果你错了,你要求纠正 - 好吧,你是:)当你实例化一个类时,首先发生的事情是被实例化的类的原型被克隆,这个克隆是新的实例。只有在实例已经存在但处于未初始化状态后,原型链中的每个构造函数都会按顺序调用该实例,从
Object构造函数到您使用new运算符调用的构造函数。 -
@U.P ,
super构造函数要在其他所有操作之前被调用,以确保一旦执行到达子类构造函数中的其余代码,实例就完全初始化了。
标签: javascript es6-class