2016-09-13 4 views
0

Je souhaite transmettre une variable d'index this à une fonction que j'appelle avec function.call().Javascript Function.prototype.call() valeur primitive de passe

var fun = function() { 
    console.log(this); 
} 

fun.call(1); 
// -> Number {[[PrimitiveValue]]: 1} 

Alors, évidemment, l'entier primitif 1 n'est pas adopté primitive à la fonction appelée. Pour MDN pour Function.prototype.call(), les valeurs primitives seront [...

Existe-t-il un moyen de le passer à fun() comme nombre entier primitif?

+2

Cela se lit comme un [Problème XY] (http://xyproblem.info/). Qu'espérez-vous réaliser en faisant cela? – Quentin

+1

si le comportement javascript est de convertir des primitives en objets, alors je ne vois pas comment vous pouvez l'éviter, à moins d'écrire votre propre moteur javascript ... cependant, cette déclaration implique que ce comportement est strictement en mode strict –

+0

si 'ceci 'est une primitive? Si c'est ce que vous voulez, pourquoi ne pas le passer en paramètre? –

Répondre

1

Dans l'exemple ci-dessus 1 est passé comme une integer param mais en interne, il est un objet de number le type de la fonction fun. Donc, afin d'accéder à la valeur de integer de this. Utilisez this.valueOf(). Je pense que cela vous aide!

var x = 12; 
 

 
function fun() { 
 
    console.log(this.valueOf()); 
 
} 
 

 
fun.call(x)

1

Eh bien ce que vous voulez est jamais possible, selon la définition de this dans une fonction. Oui, il peut y avoir moyen de contourner comme indiqué dans les autres réponses pour votre mise en œuvre.