是否可以代理原语(字符串、数字)?
Is it possible to Proxy primitives (strings, numbers)?
我正在 JavaScript 中探索代理,我想知道是否有任何方法可以 Proxy
原语。如果我尝试这样做:
new Proxy('I am a string');
它抛出 Uncaught TypeError: `target` argument of Proxy must be an object, got the string "I am a string"
我想这样做的原因是能够代理原语的原型方法。我可以编辑原型,但编辑每个原语的每个原型函数听起来不可行。
您可以通过将原始值包装在对象中来解决它:
const proxy = new Proxy({ value: 'I am a string' }, {
get(target, prop, receiver) {
const prim = Reflect.get(target, 'value');
const value = prim[prop];
return typeof value === 'function' ? value.bind(prim) : value;
}
});
proxy.endsWith('ing');
// => true
proxy.valueOf();
// => 'I am a string'
'test ' + proxy;
// => 'test I am a string'
proxy[0];
// => 'I'
我正在 JavaScript 中探索代理,我想知道是否有任何方法可以 Proxy
原语。如果我尝试这样做:
new Proxy('I am a string');
它抛出 Uncaught TypeError: `target` argument of Proxy must be an object, got the string "I am a string"
我想这样做的原因是能够代理原语的原型方法。我可以编辑原型,但编辑每个原语的每个原型函数听起来不可行。
您可以通过将原始值包装在对象中来解决它:
const proxy = new Proxy({ value: 'I am a string' }, {
get(target, prop, receiver) {
const prim = Reflect.get(target, 'value');
const value = prim[prop];
return typeof value === 'function' ? value.bind(prim) : value;
}
});
proxy.endsWith('ing');
// => true
proxy.valueOf();
// => 'I am a string'
'test ' + proxy;
// => 'test I am a string'
proxy[0];
// => 'I'