Pourquoi String.prototype enregistre-t-il son objet comme un objet standard, alors que Array.prototype enregistre son objet comme un tableau standard?

Simplement pourquoi String.prototype enregistre l'objet de chaîne avec les parenthèses courantes standard et les paires de valeurs de clé, et Array.prototype enregistre l'objet de tableau comme un tableau, avec des crochets et des valeurs?

String.prototype.test = function(){ console.log(this); // logs { '0': 't', '1': 'e', '2': 's', '3': 't' } }; var str = 'test'; str.test(); Array.prototype.test1 = function(){ console.log(this); // [1,2,3,4] }; var arr = [1,2,3,4]; arr.test1(); 

Parce que dans un appel de méthode, l'argument this est toujours (en mode sloppy) encapsulé sur un objet. Ce que vous voyez, c'est un objet String , qui a été produit à partir de la valeur de chaîne primitive "test" . Le tableau sur lequel vous appelez votre méthode est déjà un objet, donc rien ne se produit et vous obtenez le tableau comme précédemment.

Si vous utilisez un mode strict, cette distribution ne se produit pas:

 String.prototype.test = function() { "use strict"; console.log(this); }; var str = 'test'; str.test(); // logs "test"