167 votes

"Uncaught TypeError: Illégal invocation" dans Chrome

Lorsque j'utilise requestAnimationFrame de faire quelques native pris en charge l'animation au sein de code ci-dessous:

var support = {
    animationFrame: window.requestAnimationFrame ||
        window.mozRequestAnimationFrame ||
        window.webkitRequestAnimationFrame ||
        window.msRequestAnimationFrame ||
        window.oRequestAnimationFrame
};

support.animationFrame(function() {}); //error

support.animationFrame.call(window, function() {}); //right

Directement appeler la "prise en charge.animationFrame" fera "Uncaught TypeError: Illégal invocation" dans chrome! Pourquoi?

Merci!

236voto

Nemoy Points 1450

Dans votre code, vous attribuez une méthode native à une propriété de l'objet personnalisé. Lorsque vous appelez support.animationFrame(function () {}) , elle est exécutée dans le contexte de l'objet courant (c'est à dire à l'appui). Pour le natif requestAnimationFrame fonction fonctionne correctement, il doit être exécuté dans le contexte de la fenêtre

donc, l'utilisation correcte ici est - support.animationFrame.call(window, function() {});.

même chose arrive avec alert

var myObj = {
  myAlert : alert //copying native alert to an object
};

myObj.myAlert('this is an alert'); //is illegal
myObj.myAlert.call(window, 'this is an alert'); // executing in context of window 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X