"not a Date object" vs. "not an object with [[Class]] of ''Date''"

Andrea Giammarchi andrea.giammarchi at gmail.com
Sat Oct 2 14:56:07 PDT 2010


this.push.apply(this, [1, 2, 3]);

... mmmm, Dmitry, WTF :D

this.push(1, 2, 3);

easy :P

I still don't like the idea of "injectable [[Class]]" for user defined
objects ... JS follows massive cross libraries approach ... please don't
create a chaos even worst than the one we already have with randomly
extended native prototypes.

Regards,
    Andrea Giammarchi


On Sat, Oct 2, 2010 at 11:05 PM, Dmitry A. Soshnikov <
dmitry.soshnikov at gmail.com> wrote:

>  On 03.10.2010 0:58, Dmitry A. Soshnikov wrote:
>
>>  On 03.10.2010 0:51, Brendan Eich wrote:
>>
>>> On Oct 2, 2010, at 6:49 AM, Jorge wrote:
>>>
>>>  On 02/10/2010, at 15:29, Brendan Eich wrote:
>>>>
>>>>> On Sep 6, 2010, at 1:43 AM, Dmitry A. Soshnikov wrote:
>>>>>
>>>>>  For what to create a proxy? It's only for catch-traps (yes, it may be
>>>>>> used additionally to create a _catcher_ with "Array" [[Class]], but without
>>>>>> additions -- i.e. if a user wants just to inherit from Array.prototype and
>>>>>> to have all arrays' stuff -- proxies are not needed to him).
>>>>>>
>>>>> Proxies are required to update length to be one greater than index
>>>>> (property name-string P such that ToString(ToUint32(P)) == P and ToUint32(P)
>>>>> is not 2^32 - 1) when setting an indexed property. Array's magic [[Put]] is
>>>>> not inherited.
>>>>>
>>>> Why not simply spec an Array.create() ?
>>>>
>>>> -no need to redefine what an array is.
>>>>
>>> It's not clear from kangax's blog post that an array with an extra object
>>> on its prototype chain before Array.prototype is enough, but if it is, then
>>> yes: Array.create is simpler and more direct than using proxies.
>>>
>>>
>>>  -no need to learn new concepts ( we're used to Object.create() already )
>>>>
>>> There's definitely a new concept here. Right now you can't create an
>>> array instance whose [[Prototype]] is not some Array.prototype. Array.create
>>> changes that.
>>>
>>>
>>>  -easy to grasp, expected behaviour.
>>>> -it's a 3-liner that would take no more than 3 minutes to implement in
>>>> JS in any current UA.
>>>> -it would just need to be in the ES specs.
>>>>
>>> "3-liner", "3 minutes" and "just" need demonstration. Are you writing the
>>> code and spec patches? Talk is cheap :-|. Arrays are highly optimized in
>>> modern engines (up to some array sparseness limit). Adding a prototype
>>> object shouldn't hurt if the new proto-object contains no indexed
>>> properties, though.
>>>
>>>
>> Off-topic: what's wrong with the es-archive? Take a look please:
>> https://mail.mozilla.org/pipermail/es-discuss/2010-October/thread.html I
>> sent reply with implemented extended Object.create and meta-constructor
>> (meta-class) but it's not displayed there. Maybe it's not reached es-discuss
>> at all? If it didn't (by some reason), consider this implementation (
>> http://gist.github.com/607668). It allows to create objects of any
>> [[Class]] with needed inheritance chains.
>>
>>
> Another variant btw, is just to set special internal property for the
> constructor. This property specifies the [[Class]] of objects created by the
> constructor.
>
> function Foo() {
>  this.push.apply(this, [1, 2, 3]);
> }
>
> Object.setObjectsClass(Foo, "Array");
>
> var foo = new Foo();
> foo.length // 3
> Array.isArray(foo); // true
> // etc.
>
>
>  Dmitry.
>>
>>  /be
>>>
>>> _______________________________________________
>>> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20101002/e7b769b9/attachment-0001.html>


More information about the es-discuss mailing list