2011-05-25 2 views
3

J'étudiais le code TinyMCE et sommes tombés sur cette façon de exposer les méthodes publiques:Rendre une méthode publique en JavaScript. Pourquoi cette syntaxe?

tinymce.extend(this, { 
    execCommand : execCommand, 
    queryCommandState : queryCommandState, 
    queryCommandValue : queryCommandValue, 
    addCommands : addCommands 
}); 

Quel est l'avantage d'écrire ce qui précède, si le code ci-dessous peut être utilisé à la place (avec moins de lignes de code et moins de temps d'exécution nécessaire pour la même tâche)

this.execCommand = execCommand; 
this.queryCommandState = queryCommandState; 
this.queryCommandValue = queryCommandValue; 
this.addCommands = addCommands; 

Ou encore plus court, quelque part dans la déclaration d'un objet:

execCommand: execCommand, 
queryCommandState: queryCommandState, 
queryCommandValue: queryCommandValue, 
addCommands: addCommands 

Où est la prise?

Répondre

2

Eh bien, une chose qui me saute aux yeux est le premier échantillon que vous avez il ya la méthode dans laquelle le TinyMCE expects its arguments pour sa fonction extend.

En regardant la source de extend, il vérifie chaque paire de valeurs de clé pour undefined, en ne les ajoutant à l'objet que si elles sont définies. Ainsi, il y a un peu de fonctionnalité ajoutée qui peut être utile lors de l'extension d'une classe.

+0

correct, il attend une liste d'objets avec lesquels l'objet donné doit être étendu. C'est ainsi qu'ils publient leurs méthodes privées, mais ma question est pourquoi publier de cette façon, et pas une plus simple? – Andy

+0

@andy: voir mon edit :) –

+0

Merci Demian, pour moi cela signifie simplement que dans le cas d'une faute de frappe dans le nom de la méthode, il faudra plus de temps pour identifier une erreur. Mais je suppose qu'il est difficile d'argumenter avec des créateurs de métal à moins que l'on ait fait un travail d'une complexité similaire. – Andy

Questions connexes