Axel Rauschmayer wrote:
It would be great if we could eliminate these predicates completely. How often does the frame crossing problem matter in practice? It doesn’t show up in non-browser environments, right?

Those matter but not so much. I know, Node.js -- I'm a fan. But really, we have a large user base that does, I'm told, often enough face the problem that !(someArrayFromAnotherWindow instanceof Array).

I see several possibilities:
- Make instanceof work correctly with objects that have crossed frames.

We can't do this. It will break code that knows how instanceof works -- by walking the prototype chain. There's no magic here, either, unless you want this cross-frame equivalence to apply only to built-ins, based on some internal nominal tag (such as the identiy of the code pointer for the two frames' Array constructors).

- Introduce a binary predicate, e.g. likeInstanceOf that correctly handles cases where the lhs and rhs come from different contexts/frames.

Again, how? The name of the constructor in one frame may not be relevant in the other. The constructor may not be a built-in. Are you thinking in nominal type terms again? :-/

Additionally, one could throw an exception if there is an instanceof check whose lhs and rhs are from different contexts (failing fast, preventing obscure and hard-to-debug errors).
This too would be an incompatible change. I don't see any upside in messing with instanceof, and it has its uses (if only in Node.js :-).

/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to