В следующем коде
class PersonClass {
constructor(fname) {
this.fname = fname;
}
read = function() { console.log('I am reading') }
speak () { console.log('I am speaking'); }
}
//Instantiate
let p1 = new PersonClass('Raj')
read = function() { console.log('I am reading') }
становится свойством вновь созданного экземпляра, т.е.
p1.hasOwnProperty('read')
is true
вместо speak() { console.log('I am speaking'); }
назначается PersonClass.prototype
. то есть
p1.hasOwnProperty('speak')
is False
p1.__proto__.hasOwnProperty('speak')
is true
Может кто-нибудь объяснить, почему это происходит.
По сути, в чем разница между двумя способами объявления методов внутри класса.
Я думал, что speak() {...}
— это просто более короткий синтаксис для speak = function() {...}
(в ES6).
Спасибо
variableName = ...
в теле класса эквивалентен операторуthis.variableName = ...
вconstructor
. - person Titus   schedule 26.07.2019