2011-09-29 1 views
2

je donne les résultats suivants du codedélégué Javascript

function createDelegate(object, method) 
{ 
    var shim = function() 
    {     
     method.apply(object, arguments); 
    } 
    return shim; 
} 


this.test = 3; 
var pAction = {to: this.test} 
this.tmp = createDelegate(this, function() 
{ 
       print("in: " + pAction.to); 
       return pAction.to; 
}); 
print("out: " + this.tmp()); 

Mais pour une raison quelconque, je reçois le résultat suivant

in: 3 
out: undefined 

Tout le monde sait la raison?

+1

FWIW, votre code essaie essentiellement d'imiter la méthode 'ES5 .bind()'. [Jetez un oeil à la documentation MDN] (https://developer.mozilla.org/fr/JavaScript/Reference/Global_Objects/Function/bind) pour voir leur implémentation. –

+0

Sortie Wat attendez-vous à "out"? – AmGates

+0

Merci Felix Kling. Je vais y jeter un coup d'oeil. – JMCampos

Répondre

6

Lorsque vous créez la fonction déléguée, vous devez retourner le résultat de l'ancienne fonction:

function createDelegate(object, method) 
{ 
var shim = function() 
{     
    return method.apply(object, arguments); 
} 
return shim; 
} 
+0

Cela a fonctionné. Quelle erreur de débutant de ma part .... – JMCampos

+0

Ne pas déléguer juste une fermeture dans JS? – masterach