Non interceptée Type d'Erreur: Undefined n'est pas une fonction JavaScript Module
Je suis en train de passer une référence à un jQuery
Objet d'un module et ont été faire une erreur qui dit: Uncaught TypeError: undefined n'est pas une fonction
Je suis en train de travailler sur un fiddle
pour essayer de bien comprendre ce modèle que j'ai vu, ainsi que de comprendre prototype et le nouveau mot-clé.
Je ne suis pas sûr de ce qui est à l'origine de cette erreur. Voici mon HTML
et JavaScript
avec un fiddle
.
HTML:
<div class="js-container" data-options="true"></div>
<div class="js-container" data-options="false"></div>
JavaScript:
$('.js-container').each(function (i, element) {
new MyClass($(element));
console.log($(element));
});
var MyClass = (function ($element) {
this.$element;
console.log(this.$element);
this.init();
MyClass.prototype.init = function () {
this.addText();
return this;
};
MyClass.prototype.addText = function () {
var optText = this.$element.attr('data-options');
this.$element.text(optText);
return this;
};
}());
Je suis en train d'apprendre à écrire plus de module avec JavaScript
. Donc, s'il vous plaît laissez-moi savoir si j'ai quelque chose d'autre qui est incorrect. Merci!
La fonction qui a
Voir ici stackoverflow.com/questions/8228281/..., et stackoverflow.com/questions/3127429/javascript-this-keyword
Astuce: Quelle est la valeur de
Grâce elclanrs et user2864740. Je pensais que c'était parce que j'étais pas passer toute référence à la (), près de la fin. Mais je pensais aussi que l'invocation de new MyClass($(element)) permettrait de passer le sélecteur jQuery MyClass. Comment voulez-vous passer l'élément de MyClass? Le nouveau mot-clé est quelque chose de nouveau que je suis en train d'essayer de comprendre.
Je editted ma question pour mieux expliquer ce que je suis en train d'apprendre. J'ai vu un modèle similaire à ce que j'ai posté et a été à essayer de comprendre quelques concepts que j'ai lu mais n'ai pas pratiqué beaucoup. Comme le nouveau mot-clé et le prototype.
$element
comme argument est immédiatement exécuté, mais vous n'êtes pas de passage d'arguments. Et this.$element
n'existe pas, donc undefined
. Vous avez mélangé les choses...Voir ici stackoverflow.com/questions/8228281/..., et stackoverflow.com/questions/3127429/javascript-this-keyword
Astuce: Quelle est la valeur de
MyClass
? (La valeur est le résultat de invocation, la fonction anonyme - note le ()
près de la fin.)Grâce elclanrs et user2864740. Je pensais que c'était parce que j'étais pas passer toute référence à la (), près de la fin. Mais je pensais aussi que l'invocation de new MyClass($(element)) permettrait de passer le sélecteur jQuery MyClass. Comment voulez-vous passer l'élément de MyClass? Le nouveau mot-clé est quelque chose de nouveau que je suis en train d'essayer de comprendre.
Je editted ma question pour mieux expliquer ce que je suis en train d'apprendre. J'ai vu un modèle similaire à ce que j'ai posté et a été à essayer de comprendre quelques concepts que j'ai lu mais n'ai pas pratiqué beaucoup. Comme le nouveau mot-clé et le prototype.
OriginalL'auteur Mdd | 2014-01-23
Vous devez vous connecter pour publier un commentaire.
De la définition de MyClass après l'exécution du code qui utilise MyClass. Aussi, la farce de votre classe dans une variable plutôt que de déclarer la manière "traditionnelle" cause de certains problèmes. Essayez ceci:
Aussi, déplacez votre
MyClass.prototype.
définitions de la réelle MyClass. Les mettre après.Édité pour corriger cela, mais il n'est pas recommandé de modifier la question, donc bien après la poser.
Je vous remercie et je suis désolé à propos de edditing la question. Merci pour l'exemple. Comment voulez-vous étendre MyClass pour ajouter une autre méthode de prototype?
Une fois de plus... quelque chose pour une autre question... mais bien. Tapez quelque chose comme
MyClass.prototype.method = function () {}
APRÈS Maclasse a été déclarée.Merci!!!! C'est ce que j'essayais de comprendre. J'ai lu sur prototypes et modules, mais a été d'essayer de voir si je pouvais en faire un.
OriginalL'auteur rvighne
Pour ce qu'elle vaut, la plupart du temps, quand je vois ce problème, je trouve que j'ai, par inadvertance, a appelé une fonction avant il a été référencé dans le code html. Par exemple, je viens d'appeler une méthode jquery dans un fichier js avant, j'ai chargé mes fichiers jquery. Mettre le jquery références plus haut sur la page résolu.
OriginalL'auteur RandyWhirl
Aucune des réponses ci-dessus, a travaillé pour moi. Mais bien sûr, mon problème était spécial. Je recycle un vieux projet de faire un nouveau et il y avait une méthode qui a fait la classe que j'avais oublié (et passait dans une chaîne de caractères au lieu d'une fonction), et le fait qu'il n'était pas mise à jour a été de me donner cette erreur, même si j'avais la syntaxe ailleurs tout à fait correct.
Morale: si vous essayez les solutions ci-dessus et cela ne fonctionne toujours pas, bureau, vérifiez et assurez-vous everyplace où les environnants méthode est appelée passe dans les paramètres.
OriginalL'auteur shieldgenerator7