this.push.apply(this, [1, 2, 3]);<br><br>... mmmm, Dmitry, WTF :D<br><br>this.push(1, 2, 3);<br><br>easy :P<br><br>I still don&#39;t like the idea of &quot;injectable [[Class]]&quot; for user defined objects ... JS follows massive cross libraries approach ... please don&#39;t create a chaos even worst than the one we already have with randomly extended native prototypes.<br>
<br>Regards,<br>    Andrea Giammarchi<br><br><br><div class="gmail_quote">On Sat, Oct 2, 2010 at 11:05 PM, Dmitry A. Soshnikov <span dir="ltr">&lt;<a href="mailto:dmitry.soshnikov@gmail.com">dmitry.soshnikov@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im"> On 03.10.2010 0:58, Dmitry A. Soshnikov wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
 On 03.10.2010 0:51, Brendan Eich wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Oct 2, 2010, at 6:49 AM, Jorge wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 02/10/2010, at 15:29, Brendan Eich wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Sep 6, 2010, at 1:43 AM, Dmitry A. Soshnikov wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
For what to create a proxy? It&#39;s only for catch-traps (yes, it may be used additionally to create a _catcher_ with &quot;Array&quot; [[Class]], but without additions -- i.e. if a user wants just to inherit from Array.prototype and to have all arrays&#39; stuff -- proxies are not needed to him).<br>

</blockquote>
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&#39;s magic [[Put]] is not inherited.<br>

</blockquote>
Why not simply spec an Array.create() ?<br>
<br>
-no need to redefine what an array is.<br>
</blockquote>
It&#39;s not clear from kangax&#39;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.<br>

<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
-no need to learn new concepts ( we&#39;re used to Object.create() already )<br>
</blockquote>
There&#39;s definitely a new concept here. Right now you can&#39;t create an array instance whose [[Prototype]] is not some Array.prototype. Array.create changes that.<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
-easy to grasp, expected behaviour.<br>
-it&#39;s a 3-liner that would take no more than 3 minutes to implement in JS in any current UA.<br>
-it would just need to be in the ES specs.<br>
</blockquote>
&quot;3-liner&quot;, &quot;3 minutes&quot; and &quot;just&quot; 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&#39;t hurt if the new proto-object contains no indexed properties, though.<br>

<br>
</blockquote>
<br>
Off-topic: what&#39;s wrong with the es-archive? Take a look please: <a href="https://mail.mozilla.org/pipermail/es-discuss/2010-October/thread.html" target="_blank">https://mail.mozilla.org/pipermail/es-discuss/2010-October/thread.html</a> I sent reply with implemented extended Object.create and meta-constructor (meta-class) but it&#39;s not displayed there. Maybe it&#39;s not reached es-discuss at all? If it didn&#39;t (by some reason), consider this implementation (<a href="http://gist.github.com/607668" target="_blank">http://gist.github.com/607668</a>). It allows to create objects of any [[Class]] with needed inheritance chains.<br>

<br>
</blockquote>
<br></div>
Another variant btw, is just to set special internal property for the constructor. This property specifies the [[Class]] of objects created by the constructor.<br>
<br>
function Foo() {<br>
  this.push.apply(this, [1, 2, 3]);<br>
}<br>
<br>
Object.setObjectsClass(Foo, &quot;Array&quot;);<br>
<br>
var foo = new Foo();<br>
foo.length // 3<br>
Array.isArray(foo); // true<br>
// etc.<div><div></div><div class="h5"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Dmitry.<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
/be<br>
<br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote>
<br>
</blockquote>
<br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</div></div></blockquote></div><br>