Il n'y a aucun point dans l'attribution d'un nouveau tableau à Array.prototype
. C'est généralement une propriété en lecture seule et l'assignation échouera silencieusement.
> a = []
[]
> a === Array.prototype
false
> Array.prototype = a
[]
> a === Array.prototype
false
Même si l'assignation devait réussir, le tableau de remplacement aurait nécessairement été créé avec le prototype original en place. Ainsi, le prototype original serait le [[prototype]]
du nouvel objet prototype et toutes les méthodes natives seraient toujours trouvées dans la chaîne prototype de tout ensemble créé après l'affectation.
Si vous voulez remplacer (cacher) une méthode d'instance native de Array
(par exemple, push
), suffit de lui assigner la nouvelle méthode à la propriété appropriée:
Array.prototype.push = . . .;
Aussi, voir this answer la façon dont vous pourriez prolonger une méthode native (telle que push
). (Sauf si vous êtes juste l'extension d'une méthode native d'une certaine façon, je ne peux pas imaginer un cas d'utilisation lorsque cela est autre chose qu'une très mauvaise chose à faire. Même alors ...)
Vous ne devriez jamais remplacer un prototype natif et vous ne devriez presque jamais modifier un prototype natif. – SLaks
Le mot "littéral" décrit simplement la syntaxe utilisée pour créer l'objet. Si vous faites '[]' ou 'new Array()', vous obtenez la même chose. Donc, si vous deviez le faire, vous pourriez utiliser l'une ou l'autre syntaxe ... bien que je suis sûr que vous ne voudrez pas vraiment le faire. –