On Tue, May 21, 2013 at 12:56 AM, Brendan Eich <bren...@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.
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss