当用户重新定义我已经在 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')
}
},
});
当用户尝试重新定义我已经在框架中预定义为 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')
}
},
});