Можно ли автоматически запечатать объекты JS? - PullRequest
3 голосов
/ 20 октября 2019

Я хочу запечатать объекты JavaScript, как только они будут созданы:

'use strict';

class Test {
}

const t = Object.seal(new Test());
t.p = true; // error!

Есть ли способ сделать это автоматически, что-то вроде ниже?

Test.sealInstances = true // I wish sealInstances was real!
const t = new Test();
t.p = true; // error

Я знаю, ямог бы сделать это:

function createTest() {
  return Object.seal(new Test())
}

и использовать createTest везде, но я бы хотел синтаксис new Test() больше.

1 Ответ

5 голосов
/ 20 октября 2019

Просто введите Object.seal в конструкторе:

'use strict';

class Test {
  constructor() {
    Object.seal(this);
  }
}

const t1 = new Test();
const t2 = new Test();
try {
  t1.p = 'p';
} catch(e) { console.log(e.message) }
try {
  t2.z = 'z';
} catch(e) { console.log(e.message) }
...