Когда вызывается c1.rand
, я не понимаю, как интерпретатор имеет доступ к this.num
, потому что функция-конструктор еще не была вызвана. Не следует ли звонить constructor()
в rand, чтобы установить значение для 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)
Функция-конструктор вызывается при создании экземпляра. нет необходимости запускать его вручную –
@DayanMorenoLeon Спасибо. Есть что-то особенное в конструкторе слов? – MattGoldwater
@ Gwater17- * constructor * не является ключевым словом или зарезервированным словом. Специально это означает, что конструктор «*» (также называемый функцией конструктора) является объектом функции, который поддерживает внутренний метод '[[Construct]]. * (См. [* ECMA-262 §6.1.7.2 * ] (http://ecma-international.org/ecma-262/7.0/index.html#sec-object-internal-methods-and-internal-slots)). Существует свойство конструктора экземпляров, но оно общедоступно и доступно для записи, поэтому оно не особенно полезно. – RobG