将javascript类实例限制为特定属性

将javascript类实例限制为特定属性,javascript,Javascript,我想定义一个类的结构,如果用户试图使用类中未定义的属性在我的一个对象实例上设置属性,则抛出一个错误 例如,假设我有以下课程: class MyClass { constructor() { this.propertyA = 'A value'; this.propertyB = 'Another value'; } } 然后当用户修改对象实例时 let myInstance = new MyClass(); myInstance.propertyA = 'a new v

我想定义一个类的结构,如果用户试图使用类中未定义的属性在我的一个对象实例上设置属性,则抛出一个错误

例如,假设我有以下课程:

class MyClass {
  constructor() {
    this.propertyA = 'A value';
    this.propertyB = 'Another value';
  }
}
然后当用户修改对象实例时

let myInstance = new MyClass();
myInstance.propertyA = 'a new value'; // would work fine
myInstance.propertyC = 'unknown property value'; // throw exception
这可能吗?关键字似乎接近我想要的。这将阻止添加新属性,但我想抛出异常,以防用户输入的是有效的属性名

更新:
在严格模式下使用
Object.preventExtensions
Object.seal
Object.freeze
会在将不存在的属性分配给对象时导致错误。

您可以使用
代理来拦截新属性的添加并防止定义新属性:

class-MyClass{
构造函数(){
this.propertyA='A value';
this.propertyB='另一个值';
返回新代理(此{
get:(u,prop)=>此[prop],
设置:(uu、属性、值)=>{
如果(!(此处为prop))抛出新错误('prop不存在!');
这个[prop]=值;
}
});
}
}
让myInstance=new MyClass();
myInstance.propertyA='一个新值';//行吗
log('即将设置propertyC:');

myInstance.propertyC='未知属性值';//抛出异常
也许像Typescript这样的东西比运行时检查更有用,它可以为您提供静态类型检查并在编译时发出警告?您可以使用getter/settersRelated:感谢您让我走上正确的道路!出于我的需要,
Object.preventExtensions
与严格模式相结合,获得了所需的行为。需要明确的是:
Object.preventExtensions
方法将在严格模式下运行时导致异常。