Они не одинаковы. В первом коде вы присваиваете автономную переменную с именем obj
. (Надеюсь, вы определили это заранее, например, let obj;
, в противном случае будет выдана ошибка; конструкторы всегда будут работать в строгом режиме)
let obj;
class App {
constructor(){
obj = { val1: null, val2: '' };
}
}
const app = new App();
console.log(obj);
console.log(app.obj);
class App {
constructor(){
obj = { val1: null, val2: '' };
}
}
const app = new App();
console.log(app.obj);
class App {
obj = { val1: null, val2: '' };
}
const app = new App();
console.log(app.obj);
Во втором коде вы назначаете свойство obj
экземпляру в начале конструктора. Второй код эквивалентен:
class App {
constructor(){
this.obj = { val1: null, val2: '' };
}
}
Совместимость браузера также является проблемой. Синтаксис поля класса (который используется вашим вторым кодом) очень новый; если вы хотите его использовать и у вас есть что-то кроме самых последних браузеров, способных понимать код, обязательно используйте Babel, прежде чем предоставлять его клиентам.