This could be resolved by checking the underlying non-proxy object and
using that one's internal slots instead, in each language-level method that
checks that.

On Thu, Nov 10, 2016, 09:20 Claude Pache <[email protected]> wrote:

>
> > Le 10 nov. 2016 à 14:59, Angel Scull <[email protected]> a écrit :
> >
> > Hello,
> >
> > I’ve tried this code and seems that there is some weird type checking
> somewhere that causes this exception.
> >
> > TypeError: Method RegExp.prototype.exec called on incompatible receiver
> [object Object]
> >
> >
> > let pattern =
> /^[a-zA-Z0-9\-\._]+@[a-zA-Z0-9\-_]+(\.?[a-zA-Z0-9\-_]*)\.[a-zA-Z]{2,3}$/;
> >
> > let patternProxy = new Proxy(pattern,{});
> >
> > patternProxy.test('[email protected]')
>
> This is because the `exec` method of `pattern` is internally called with
> `patternProxy` as its receiver (i.e, its "this argument"), and
> `patternProxy` is not a regexp. This is a general issue with proxies, and
> not a bug.
>
> A simple adhoc workaround is to bind the `exec` method of that particular
> `pattern` to `pattern` itself:
>
> ```js
> pattern.exec = pattern.exec.bind(pattern)
> ```
>
> —Claude
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss
>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to