André Bargull (2014-06-11T15:49:52.000Z)
On 6/11/2014 5:40 PM, Alexandre Morgaut wrote:
>
> On 11 juin 2014, at 17:11, André Bargull <andre.bargull at udo.edu> wrote:
>
>>> Quick note: that isConstructor isn't really viable unless you plan on using
>>> it with constructors that do not have side effects.
>>>
>>> Rick
>>
>> The Proxy-based solution needs to be used in these cases. Now we just need to wait until Proxies are available everywhere! ;-)
>>
>
>
> Not sure Proxy solve anything when we want to test the constructor nature of a function and be sure invoking it won't change anything in the current application context
>
> To highlight what side-effects mentioned by Rick could be, a tested function while invoked may:
> - do DOM Manipulations,
> - change properties in the global object,
> - initiate Web Sockets or Web Workers...
>
> Not safe at all...
>

 From [1]:
```javascript
function IsConstructor(o) {
   try {
     new (new Proxy(o, {construct: () => ({})}));
     return true;
   } catch(e) {
     return false;
   }
}
```

This IsConstructor implementation does not trigger any side-effects and 
works even when the underlying constructor requires arguments etc.



[1]
https://github.com/anba/es6draft/blob/master/src/test/scripts/suite/lib/assert.js#L53-L60


> [...]
>
>
> Alexandre Morgaut
> Wakanda Community Manager
>
> 4D SAS
> 60, rue d'Alsace
> 92110 Clichy
> France
>
> Standard : +33 1 40 87 92 00
> Email :    Alexandre.Morgaut at 4d.com
> Web :      www.4D.com
>
>
domenic at domenicdenicola.com (2014-06-20T19:24:42.905Z)
On 6/11/2014 5:40 PM, Alexandre Morgaut wrote:

> Not sure Proxy solve anything when we want to test the constructor nature of a function and be sure invoking it won't change anything in the current application context

 From [1]:
```javascript
function IsConstructor(o) {
   try {
     new (new Proxy(o, {construct: () => ({})}));
     return true;
   } catch(e) {
     return false;
   }
}
```

This IsConstructor implementation does not trigger any side-effects and 
works even when the underlying constructor requires arguments etc.



[1]: https://github.com/anba/es6draft/blob/master/src/test/scripts/suite/lib/assert.js#L53