当用户重新定义我已经在 class 中预定义的变量时抛出异常?

Throw an exception when a user redefines a variable I already predefined in a class?

当用户尝试重新定义我已经在框架中预定义为 class 的变量时,我该如何抛出异常?

框架脚本

function Car(){
this.loc=new Location();
}  

function Location(x,y,z){
this.x=x;
this.y=y;
this.z=z;
}

示例用户脚本

mycar=new Car();
mycar.loc.x=100;
mycar.loc.y=10;
mycar.loc.z=100;

有没有办法在用户不小心这样做时抛出错误:

mycar=new Car();
mycar.loc=5; //assigns a number to what is supposed to be a Location class.

是的,您可以使用 defineProperty。这是一个(未经测试的)示例:

function Car(){
   let loc = new Location();

   Object.defineProperty(this, "loc", {
       get: function() { return loc; },
       writable: false,
   });
}  

function Location(x,y,z){
    this.x=x;
    this.y=y;
    this.z=z;
}

更新:

要真正抛出错误,您需要做

   Object.defineProperty(this, "loc", {
       get: function() { return loc; },
       set: function(value) {
         if (value instanceof Location) {
           loc = value
         } else {
           throw Error('Dont do this')
         }
       },
   });