Несоответствие нотации в скобках в методах доступа к свойствам объекта для динамически именуемой функции-конструктора.Есть ли объяснение? - PullRequest
0 голосов
/ 24 ноября 2018

Я хочу динамически создавать объекты динамически именованного класса (извините, JS, я привык называть их классами) через динамически именуемую анонимную функцию.В этом ответе я обнаружил, что ...

Начиная с ES2015, функция, созданная выражением анонимной функции, назначенной свойству объекта, принимает имя этого свойства объекта.

Итак, я попробовал этот код:

// dynamically named constructor function
this['Item'] = function(size) {
  this.size = size;
}
// the creation of new object of arbitrary name
let item = new this['Item']('small')
console.log(item);
console.log(this['Item'].name)

и это работает: console screenshot 1

НО, когда я фактически использую имя переменной ...

let clsName = 'Item';
// dynamically named constructor function
this[clsName] = function(size) {
  this.size = size;
}
// the creation of new object of arbitrary name
let item = new this[clsName]('small')
console.log(item);
console.log(this[clsName].name)

Это странно: console screenshot 2

Сама задача для меня гораздо менее важна, чем тот факт, что поведение obj['string'] иobj[variableWithString] отличается.Кто-нибудь может объяснить, пожалуйста, этот феномен для меня?Разве результат во втором примере не должен быть таким же, как в первом?

...