brendan at mozilla.org
Sat Sep 20 12:12:44 PDT 2014
L2L 2L wrote:
> I see the value of this, cause it denote not only the constructor, but what an object is:
> If you try the first to with Object.getPrototypeOf("");
> You'll get an error message, cause primitive value don't have prototype. But they do have wrapper objects; constructor objects.
> This to me is a needed feature of the language.
It's not a "kernel language" feature, as you showed -- it is library
code that can be built on top of the core language. And you are right
that we seem to observe a fair amount of
for value x.
However, getConstructorOf("") returning "String" (a string value),
instead of the constructor function, is misleading. But returning the
constructor function reference is wrong for primitive values, because 42
!== new (42).constructor(42). Primitives have value not reference semantics.
What you are really proposing is an Object.getToStringTag method. But in
ES6, that is just x[Symbol.toStringTag], if I'm not mistaken. So do we
really need Object.getToStringTag(x), which is longer?
for the ES6 spec.
Then you could argue that an Object "static method" is better both to
hide the Symbol.toStringTag detail and to enable polyfilling on pre-ES6
browsers. That's a fair point.
More information about the es-discuss