Extended Object Literals to review
Brendan Eich
brendan at mozilla.com
Sat Mar 12 15:37:08 PST 2011
On Mar 12, 2011, at 2:58 PM, Juan Ignacio Dopazo wrote:
> Correct me if I'm wrong, but I think it should be like this:
>
> function S() {}
>
> function C() {
> Object.defineProperty(this, 'constructor', {
> value: C,
> enumerable: false,
> writable: false,
> configurable: false
> });
> }
> C.prototype = Object.create(S.prototype);
>
> var o = new C();
> console.log(o.constructor == C); // true
> console.log(o.constructor.prototype.constructor == S); // true
But this also puts an own property on every instance, which is not how .constructor works with functions:
js> function C(x) { this.x = x; }
js> c = new C(42)
({x:42})
js> c.hasOwnProperty('x')
true
js> c.hasOwnProperty('constructor')
false
js> c.constructor
function C(x) {this.x = x;}
js> c.constructor === C
true
/be
>
> Juan
>
>
> On Sat, Mar 12, 2011 at 4:36 PM, Allen Wirfs-Brock <allen at wirfs-brock.com> wrote:
> good point, the desugaring should be:
>
> function c() {};
> c.prototype=Object.create(s,protoype,{'constructor': { value:c, enumerable: false, writable: false, configurable:false}});
>
> We can debate about the attributes of the constructor (and the constructor's prototype) property but my stake in the ground is that these should be frozen because they are defined declaratively.
>
> On Mar 12, 2011, at 11:06 AM, Michael Haufe wrote:
>
>> On Sat, Mar 12, 2011 at 11:02 AM, Allen Wirfs-Brock <allen at wirfs-brock.com> wrote:
>> [...]
>> > class c {
>> > <proto: s.prototype>
>> > }
>>
>> > class c {
>> > <superclass: s>
>> > }
>>
>> > both are equivalent to:
>>
>> > function c() {};
>> > c.prototype=Object.create(s.prototype);
>> [...]
>>
>> So if "var b = new c", then "b.constructor" will be "s" instead of "c"?
>>
>>
>
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
More information about the es-discuss
mailing list