2010-10-28 4 views
1

J'ai un peu très simple de code (repose sur jQuery):Mise en « méthode non définie » quand il est clairement défini dans JS

var dom_builder = function() { 

    this.table = function(elem,attributes) { 
     return $("<table>").attr(attributes).appendTo(elem); 
    } 

}; 

console.log(dom_builder.table); 

Maintenant, lorsque je tente de l'exécuter, je reçois l'erreur suivante: TypeError Uncaught: Object # n'a pas de méthode 'table'

Je ne peux pas comprendre pourquoi j'ai cette erreur. J'ai utilisé des méthodes de cette façon d'innombrables fois avant, sans aucun problème ..

Des idées?

Répondre

2
console.log(new dom_builder().table); 
+0

vous avez besoin entre parenthèses, comme 'console.log (nouveau dom_builder(). Table())' pour que cela fonctionne – cambraca

+0

@cambraca La syntaxe de Anurag est valide. Tout dépend de ce que vous essayez de démontrer, et je pense qu'il voulait montrer que la fonction existe en utilisant cette syntaxe. –

+0

@Adam Backstrom c'est valide, mais ça ne marchera pas comme prévu. Il va retourner la fonction, au lieu du résultat de la fonction, ce qui est nécessaire, non? – cambraca

3

Essayez cette

var dom_builder = { 

    "table": function(elem,attributes) { 
     return $("<table>").attr(attributes).appendTo(elem); 
    } 

}; 
+0

Nice, approche totalement différente et cela fonctionne sans avoir à lancer la fonction comme recommandé ci-dessous :) Nice – Naatan

1

dom_builder.table n'existe pas jusqu'à ce que la fonction est exécutée.

console.log(dom_builder.table); // undefined 
d = new dom_builder(); 
console.log(d.table); // function(elem, attributes) { ... } 
Questions connexes