Ce n'est pas sur la performance, il est sur l'accès à une propriété d'une instance spécifique d'un objet: -
x.init()
n'affichaient « test » si vous ne l'aviez pas utiliser this
dans la fonction.
efficacement la ligne ci-dessus est le même que: -
x.init.call(x);
la première paramater dans l'utilisation de call
est affecté à this
lorsque la fonction est exécutée.
Considérons maintenant: -
var fn = x.init; //Note no() so the function itself is assigned to the variable fn
fn();
Maintenant vous avez rien dans l'alerte. Parce que ce qui précède est efficace: -
fn.call(window);
Dans navigateur l'objet Javascript organisé window
est synonyme de l'objet global. Lorsqu'une fonction est appelée "à l'état brut", this
renvoie par défaut à l'objet global.
L'erreur classique fait quelque chose comme ceci: -
var x = {
ele: 'test';
init: function(elem) {
elem.onclick = function() { alert(this.ele); }
}
}
x.init(document.getElementById('myButton'));
Toutefois, cela ne fonctionne pas parce que la fonction attachée à l'événement onclick est appelé par le navigateur en utilisant le code comme: -
onclick.call(theDOMElement)
Par conséquent lorsque la fonction est en cours d'exécution this
n'est pas ce que vous pensez qu'il est.
Ma solution habituelle à cette situation est: -
var x = {
ele: 'test';
init: function(elem) {
var self = this;
elem.onclick = function() { alert(self.ele); }
elem = null;
}
}
x.init(document.getElementById('myButton'));
Notez la elem = null
est fuite de mémoire IE travail autour.
Ce n'est pas seulement vous - c'est l'un des aspects les plus confus de la langue. Vous devriez avoir de bonnes réponses. J'ai hâte de les lire. –