Они оба работают, но есть некоторые риски при использовании имени объекта, посмотрите на это:
let user = {
name: "John",
age: 30,
sayHi() {
alert( user.name ); // leads to an error
}
};
let admin = user;
user = null; // overwrite to make things obvious
admin.sayHi(); // Whoops! inside sayHi(), the old name is used! error!
При использовании this
код будет работать правильно, просто позаботьтесь о такого родасценарии.
Также, если вы хотите использовать повторно используемый код, используйте this
, который подходит лучше:
let user = { name: "John" };
let admin = { name: "Admin" };
function sayHi() {
alert( this.name );
}
// use the same functions in two objects
user.f = sayHi;
admin.f = sayHi;
// these calls have different this
// "this" inside the function is the object "before the dot"
user.f(); // John (this == user)
admin.f(); // Admin (this == admin)
admin['f'](); // Admin (dot or square brackets access the method – doesn't matter)
Чтобы узнать больше, здесь: https://javascript.info/object-methods