Array.create and Function.create

Augusto Moura augusto.borgesm at gmail.com
Thu Jan 10 13:54:15 UTC 2019


If you don't want the iterable features neither the own properties,
what're the benefits over a object indexed by numbers `const o =
Object.create(null); o[0] = 12; ...`?
About the other function proprosal (`Function.create`) I don't see any
benefits in day to day use having a function without prototype

If you are interested in a performatic barebones fixed-sized arrays
(like your C example) you should read about ArrayBuffers and Typed
Array views[1]. Actually it is the closest to your example as
Javascript could potentially get.

[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays

Em qui, 10 de jan de 2019 às 07:35, Sultan <thysultan at gmail.com> escreveu:
>
> >Why would this be better than `const a = []; Object.setPrototypeOf(a, null)`?
>
> In that example "a" value would still have "own" properties like length.
>
> a = Array.create(null, 10)
>
> Wouldn't have any own or prototype properties by design; It is mean to be "bare-bones" or as close to a C-like:
>
> a = malloc(sizeof(void*)*10)
>
> as JavaScript could potentially get.
>
> On Thu, Jan 10, 2019 at 11:54 AM Jordan Harband <ljharb at gmail.com> wrote:
>>
>> Why would this be better than `const a = []; Object.setPrototypeOf(a, null)`?
>>
>> On Thu, Jan 10, 2019 at 12:09 AM Sultan <thysultan at gmail.com> wrote:
>>>
>>> >An array with no prototype wouldn't have any of the iteration methods on it...
>>>
>>> Yes, that is what is intended with this, similar to an Object.create(null) object with number-ed keys.
>>>
>>> Alternatively one could look at the objects created from this to be the "bare-bones" structure around these data-structures.
>>>
>>> That is the in-existence of prototypes and own properties like "length" makes it clear that these "flat" objects are intended as author managed objects.
>>>
>>> There are is no visible default prototype or own properties because the author will create, expose and managed these for the data-structure explicitly if need be or more commonly choose to not expose the data-structure at all and use these for low-level internal book keeping for other abstractions.
>>>
>>> This would create a new ceiling(or ground-level) for how "low-level" one could go with JavaScript if these where part for the language and as a secondary consequence allow engines to make stronger assumptions with regards to operations on these structs.
>>>
>>> On Thu, Jan 10, 2019 at 9:48 AM Jordan Harband <ljharb at gmail.com> wrote:
>>>>
>>>> An array with no prototype wouldn't have any of the iteration methods on it; a function with no prototype wouldn't have .call/.bind/.apply - length and name are own properties of functions, and length is an own property of an array, so you'd get those regardless.
>>>>
>>>> (`Array.from({ length: 1000 })` already creates an array of length 1000 without holes, fwiw)
>>>>
>>>> On Wed, Jan 9, 2019 at 10:43 PM Sultan <thysultan at gmail.com> wrote:
>>>>>
>>>>> Identical to Object.create but for Arrays and Functions.
>>>>>
>>>>> This method will allow you to create arrays with no prototype.
>>>>>
>>>>> This would allow authors the ability to use array objects as state containers without the need to resort to index-based objects with
>>>>>
>>>>> Object.create(null, length)
>>>>>
>>>>> When you want to both use an array-like struct as both a property and index-able map.
>>>>>
>>>>> A side-effect of this would afford engines a strong heuristic for avoiding holey-array look-ups operations when there's no prototype to walk.
>>>>>
>>>>> For example the following would create an array with a length of 1000 without "holes".
>>>>>
>>>>> const arr = Array.create(null, 1000)
>>>>>
>>>>> In addition this could also apply to functions with
>>>>>
>>>>> Function.create(null, () => {})
>>>>>
>>>>> When you want to use functions as state-containers but don't want any of the implicit properties(length, name) etc.
>>>>> _______________________________________________
>>>>> 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



-- 
Atenciosamente,

Augusto Borges de Moura


More information about the es-discuss mailing list