是否可以代理原语(字符串、数字)?

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'