Is it spec-compliant to forbid setPrototypeOf(Object.prototype, foo)?

Michał Wadas michalwadas at
Thu Feb 2 12:38:06 UTC 2017

Thanks, I erroneously looked at ES2015 spec that calls Object.prototype
ordinary object.

    The Object prototype object is the intrinsic object
    %ObjectPrototype%. The Object prototype object is an ordinary object.
    The value of the [[Prototype]] internal slot
    of the Object prototype object is null and the initial value of the
    [[Extensible]] internal slot
    is true.

On 02/02/17 13:31, T.J. Crowder wrote:
> On Thu, Feb 2, 2017 at 12:19 PM, Michał Wadas <michalwadas at
> <mailto:michalwadas at>> wrote:
>     Right now this code:
>     Object.setPrototypeOf(Object.prototype, Object.create(null))
>     throws in both Chrome and Firefox. I couldn't find any mention of
>     special [[SetPrototypeOf]] of %ObjectPrototype%, did I miss something?
> Yes. :-) You missed that `Object.prototype` is an immutable prototype
> exotic object:
> *
> *
> ...which does indeed have a special [[SetPrototypeOf]] which
> (indirectly) returns false if you try to change the [[Prototype].
> `Object.setPrototypeOf` throws when [[SetPrototypeOf]] returns
> false:
> -- T.J.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list