B.3.1 The __proto__ pseudo property

Andrea Giammarchi andrea.giammarchi at gmail.com
Tue May 21 09:43:04 PDT 2013


On Tue, May 21, 2013 at 12:56 AM, Brendan Eich <brendan at mozilla.com> wrote:

> Andrea Giammarchi wrote:
>
>> can I also suggest to analyze, if there's still any doubt left on a
>> method VS a property yet, this piece of code if not highlighted before?
>>
>
> I do not understand what you mean here.
>
>
I mean that JSON, as part of the specs, needs to consider that "magic"
property case, resulting into an `instanceof Object`, with an enumerable
property that will show up in a `for/in` loop but it's not able to mutate
the object.

```
var obj = JSON.parse('{"__proto__":[]}');
alert(obj instanceof Array); // false
alert(obj["__proto__"] instanceof Array); // true
obj["__proto__"] = obj["__proto__"];
// or
for (var key in obj) {
  obj[key] = obj[key];
  // could be a generic
  // clone operation
}
alert(obj instanceof Array); // false
alert(obj instanceof Object); // true
```

Above kind of object is "not perfectly described in current specs" and is
different from any other where the `__proto__` is the inherited and not own
property.

This is what developers should be aware of, that `__proto__` might not be
what they think is while `Object.setPrototypeOf(obj, proto):obj` will
always work as expected, as well as `Object.getPrototypeOf(obj):proto`

All I am saying is that I understood reasons `__proto__` is there but I
hope there won't be any step backward about `Object.setPrototypeOf`

All the best and looking forward to read the notes.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20130521/41d1001a/attachment-0001.html>


More information about the es-discuss mailing list