Я хочу динамически создавать объекты динамически именованного класса (извините, 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)
и это работает:
НО, когда я фактически использую имя переменной ...
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)
Это странно:
Сама задача для меня гораздо менее важна, чем тот факт, что поведение obj['string']
иobj[variableWithString]
отличается.Кто-нибудь может объяснить, пожалуйста, этот феномен для меня?Разве результат во втором примере не должен быть таким же, как в первом?