Quando si utilizza call()
e impostando l'argomento this
per un valore di base, che valore di base viene sempre convertito in un oggetto, in modo da ottenere l'oggetto stringa invece della stringa primitiva
String {0: "t", 1: "e", 2: "s", 3: "t", length: 4, ...
La documentazione per call()
su MDN stati che
thisArg
Il valore di this
fornito per la chiamata alla funzione.
noti che questo non può essere il valore effettivo visto dal metodo: se il metodo è una funzione in non-rigido codice modalità, null
e undefined
verranno sostituiti con l'oggetto globale, e valori primitivi saranno convertiti agli oggetti.
Quindi, in modalità non rigorosa il valore della stringa primitiva viene convertito in un oggetto, questo è anche specificato nel ECMA standard, Annex C
severa restrizione modalità e le eccezioni
Se this
è valutato all'interno del codice di modalità rigoroso, quindi il valore this
è non forzato a un oggetto.
A questo valore di null
o undefined
non viene convertito nell'oggetto globale ei valori primitivi non vengono convertiti in oggetti wrapper.
Il valore this
passato tramite una chiamata di funzione (tra cui le chiamate effettuate utilizzando Function.prototype.apply
e Function.prototype.call
) non costringere il this
valore passato a un oggetto
Non è 'call' che cambia nulla. È la modalità sciatta che costringe il valore 'this' a un oggetto (qui, un oggetto' String'). – Bergi