I want to dynamically create objects of dynamically named class (sorry JS, I got used to call them classes) via dynamically named anonymous function. In this answer I found out that...
As of ES2015, the function created by an anonymous function expression assigned to an object property takes the name of that object property.
So I tried this code:
// 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)and it works: 
BUT when I am actually using the variable 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)It is acting weird: 
The task itself is much less of an issue for me then the fact that behavior of obj['string'] and obj[variableWithString] differs. So can anybody please explain this phenomena for me? Shouldn't the result in the second example be the same that was in the first one?
 
    