js_varscope_defineprop

JavaScript

class TestA {}

for (let i = 0; i < 2; i++) {
  let cA = 0;
  for (let j = 0; j < 2; j++) {
    Object.defineProperty(TestA.prototype, 'prop_' + i + "_" + j, {
      get() { return "val_" + i + "_" + j + ":" + cA; }
    });
    cA++;
  }
}

tA = new TestA();

for (let i = 0; i < 2; i++) {
  let cA = 0;
  for (let j = 0; j < 2; j++) {
    console.log(
      "not-really-but-lets-say-expected", "val_" + i + "_" + j + ":" + cA,
      "got", tA["prop_" + i + "_" + j]
    );
    cA++;
  }
}

class TestB {}

for (let i = 0; i < 2; i++) {
  let cA = 0;
  for (let j = 0; j < 2; j++) {
    let cB = cA;
    Object.defineProperty(TestB.prototype, 'prop_' + i + "_" + j, {
      get() { return "val_" + i + "_" + j + ":" + cB; }
    });
    cA++;
  }
}

tB = new TestB();

for (let i = 0; i < 2; i++) {
  let cB = 0;
  for (let j = 0; j < 2; j++) {
    console.log(
      "not-really-but-lets-say-expected", "val_" + i + "_" + j + ":" + cB,
      "got", tB["prop_" + i + "_" + j]
    );
    cB++;
  }
}