2010-01-10 6 views
3

Quelle est la différence entre les fonctions d'un objet. J'ai 2 exemples qui font essentiellement la même chose.Différence Javascript entre les fonctions d'un objet

function a(param) { 
    function b(input) { 
     return input%10; 
    }; 
return 'The result is ' + b(param); 
}; 

et

function a(param) { 
    this.b=function(input) { 
     return input%10; 
    }; 
return 'The result is ' + this.b(param); 
}; 

Quel est l'avantage et les disadvatages dans les deux cas? Dans la seconde, je sais que cette fonction peut être appelée depuis l'extérieur de la fonction principale. Existe-t-il également une différence lors de l'exécution? (comme le temps et la performance)

Répondre

11

Vous devez être prudent avec le deuxième exemple, le mot-clé this se référera à l'objet global si vous appelez la fonction sans l'opérateur new, et en regardant votre valeur de retour, semble que vous n'essaient pas de faire un constructor function.

Je pense que vous devez savoir comment le mot-clé this (le contexte de la fonction) fonctionne:

Le mot-clé this est implicitement ensemble lorsque:

1- Lorsqu'une fonction est appelée en tant que méthode (la fonction est invoquée en tant que membre d'un objet):

obj.method(); // 'this' inside method will refer to obj 

2- un appel de fonction normale:

myFunction(); // 'this' inside the function will refer to the Global object 
// or 
(function() {})(); 

3- Lorsque l'opérateur new est utilisé:

var obj = new MyObj(); // this will refer to a newly created object. 

Et vous pouvez également définir le mot-clé thisexplicitement, avec les call et apply méthodes:

function test() { 
    alert(this); 
} 

test.call("Hello world"); // alerts 'Hello world' 

Maintenant, la différence entre la fonction b de vos deux exemples, est fondamentalement que dans le premier extrait, b est une déclaration de fonction , dans votre deuxième exemple b est une expression de fonction.

Les déclarations de fonction sont soumises à hoisting et elles sont évaluées au moment de l'analyse, les expressions de fonction sont définies au moment de l'exécution.

Si vous voulez plus de détails sur les différences entre les déclarations de fonction et les expressions de la fonction, je vous laisse quelques ressources:

Et BTW, vous n'avez pas besoin le semicolon after function declarations.

Questions connexes