>> - 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? :-/
Strawman for a polyfill:
function hasClass(value, type) {
// Possibly: throw if `type` is not a built-in or does not have a
property `name`
return Object.prototype.toString.call(value) === "[object
"+type.name+"]";
}
Interaction:
$ hasClass([], Array)
true
$ hasClass([], RegExp)
false
Alternative: work with string values.
function hasClass(value, typeName) {
if (typeof typeName !== "string") {
throw new TypeError("...");
}
return Object.prototype.toString.call(value) === "[object
"+typeName+"]";
}
Interaction:
$ hasClass([], "Array")
true
$ hasClass([], "RegExp")
false
Admittedly, this solution has its own problems. But, IMO, it is an improvement
to having one predicate per builtin. Plus, it would work with non-builtins,
too. A function getClassName() (as suggested by Jorge) would work just as well.
$ getClassName(arrayFromAnotherWindow)
"Array"
$ getClassName(regexFromAnotherWindow)
"RegExp"
Do modules change anything? Are module instances shared between windows? Will
there be a unique way of identifying types? Are there any other ideas for
making the cross-window situation simpler?
--
Dr. Axel Rauschmayer
[email protected]
home: rauschma.de
twitter: twitter.com/rauschma
blog: 2ality.com
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss