right now? the `[[Class]]` such as `'[object Array]'` ... and the magic is
this smarter slice.
I insist this would be way better and already possible today:
```javascript
(function(Object, ArrayPrototype){
if (typeof ArrayObject !== 'undefined') return;
ArrayObject = function(){};
for(var
modify = [
'concat',
'copyWithin',
'filter',
'map',
'slice',
'splice'
],
keys = Object.getOwnPropertyNames(ArrayPrototype),
create = function(method) {
return function() {
return Object.setPrototypeOf(
method.apply(this, arguments),
Object.getPrototypeOf(this)
);
};
},
i = keys.length,
current, key;
i--;
) {
key = keys[i];
current = Object.getOwnPropertyDescriptor(ArrayPrototype, key);
if (~modify.indexOf(key)) current.value = create(current.value);
Object.defineProperty(ArrayObject.prototype, key, current);
}
}(Object, Array.prototype));
```
where any class that extends `ArrayObject` will have the new behavior and
less problem with the past.
```javascript
var a = new ArrayObject;
a.push(1, 2, 3);
a.slice() instanceof ArrayObject; // true
```
br
On Tue, Sep 10, 2013 at 4:32 PM, Allen Wirfs-Brock <[email protected]>wrote:
>
> On Sep 10, 2013, at 4:11 PM, Andrea Giammarchi wrote:
>
> > Rick I think I've often seen this which is not that naive accordingly
> with ES 5.1 down to ES 3 specs, IMO .. it worked with DOM, arguments, and
> everything with a `length` till now.
> >
> > ```javascript
> > Array.from||(Array.from=function(a){return
> Array.prototype.slice.call(a)});
> > ```
> >
> > Allen the `%TypedArray%` is a good example because this is false: `new
> Float32Array instanceof Array` ... that constructor has even the suffix
> with the `Array` word but is not an `Array` at all.
> >
> > `Array.isArray(new Float32Array)` is again false indeed.
> >
> > I also think this magic should somehow be something new, hoping nobody
> will think about creating polyfills for all Array methods because once
> again that will be very bad for the web/mobile/ARM world, IMO.
>
> Which magic are you talking about. Array.isArray is defined for ES6 to
> test whether an object has the length invariant automatically enforced.
> That's really the only thing that makes an Array instance special (or in
> ES6-speak, exotic). Float32Arrays do not have that length invariant because
> their length is fixed.
>
> What do you think people are actually testing for when they do
> Array.isArray?
>
> Allen
>
>
>
>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss