While playing around with a simple Javascript Object Initializer example, I could not find an explanation while the following code:
const obj = {
  self: this
};
console.log(obj);would lead an Error: Maximum call stack size exceeded?
Meanwhile, a slightly different but may look similar initializer block as follows:
const obj = {
  self: obj
};
console.log(obj);would lead an Error: Cannot access uninitialized variable. while the following example using method initializers works perfectly fine:
const obj = {
  name: 'Bob',
  a() {
    return obj.name;
  },
  b() {
    return this.name;
  },
};
console.log(obj.a());
console.log(obj.b());Can you elaborate on the object initialization process and why the language allows the under initialization object and its this references usage inside method initializers and not in property values?
 
     
    