为什么方法调用新实例?

时间:2016-08-31 21:35:56

标签: javascript ecmascript-6 this es6-class

c1.rand被调用时,我不清楚解释器如何能够访问this.num,因为尚未调用构造函数。是不是必须在rand中调用constructor()才能设置this.num的值?

class C {
    constructor() {
        this.num = Math.random();
    }
    rand() {
        console.log( "Random: " + this.num );
    }
}

var c1 = new C();
c1.rand(); // "Random: 0.4324299..." (any number from 0 to 1)

2 个答案:

答案 0 :(得分:4)

创建对象时会立即调用构造函数,因此当您调用时:

var c1 = new C();

调用构造函数。名称构造函数来自使用,它立即被调用,因为它构造了对象。这意味着它初始化变量等 - 对象中必不可少的东西,this.num在你的情况下。是的,它是声明类时对象创建的保留函数。

new关键字表示'新实例',在新实例创建时,会调用构造函数。

答案 1 :(得分:3)

  

当调用c1.rand时,我不清楚解释器如何能够访问this.num,因为尚未调用构造函数。

是的,它有。在编写

时调用了构造函数
var c1 = new C();
  

只有名为b / c构造函数的构造函数是一个特殊的关键字吗?

是的,如果class定义了constructor函数,则在使用new关键字调用该类时会调用它。

constructor属性也可以通过实例的原型访问。

var c1 = new C();
c1.constructor === C //=> true