这是我尝试使用的代码(注意:它不是解决方案):
// define main object
class MyObject {}
// set proxy of Object's prototype as prototype of main object
Object.setPrototypeOf( MyObject.prototype, new Proxy( Object.prototype, {
// implement new get behavior
get( trapTarget, key, reciever ){
// throw error if unexistansible variable is tryed to be called
if ( ! key in trapTarget )
throw new SyntaxError( 'message' );
return Reflect.get( trapTarget, key, reciever );
}
}));
// define new child class
class MyChildObject extends MyObject {}
let child = new MyChildObject();
由于MyObject.protototype代理被引用到Object的原型,我们无法从继承的实例中获取任何属性。
我的代码如何运作:
child.unexistansibleVar
方法get()
将被代理人抓取时child.prototype
始终为trapTarget
,我无法取代Object.prototype
,因此所有密钥都会被设法在那里找到它应该如何运作:
child.unexistansibleVar
child
并检查if ( ! key in child )
我的问题:
child
?如果我错过了某事或写下了不可理解的东西,请随时问我。
答案 0 :(得分:0)
class MainClass {
constructor() {
return new Proxy( this, {
get( trapTarget, key, reciever ) {
if ( ! ( key in trapTarget) )
throw new SyntaxError( 'msg' );
return Reflect.get( trapTarget, key );
}
});
}
}
class ChildClass extends MainClass {}
let child = new ChildClass();
child.name = 'child object';
console.log( child.name ); // 'child object'
console.log( child.some ); // error 'msg'