2017-09-15 1 views
0

Je crée le code suivant en JavaScript (à l'intérieur file1.js)JavaScript Prototypes et jQuery Selectors

function ABC() { 
    this.property01 = true; 
} 

ABC.prototype.doSomething = function() { 

    if (this.property01 == true) { 
     // Do something 
    } 
} 

Puis, plus tard dans un fichier séparé dans mon projet (permet de l'appeler file2.js) , J'ai le jQuery suivant:

$(document).ready(function() { 

    var abc = new ABC(); 

    // Some code here 

    abc.doSomething(); 

    // continue with code 
}); 

Jusqu'à présent, tout est correct.

Maintenant, ce que je voudrais faire est à l'intérieur de la définition du prototype de doSomething() dans file1.js, je veux utiliser jQuery. Quelque chose le long des lignes

function ABC() { 
    this.property01 = true; 
} 

ABC.prototype.doSomething = function() { 

    if (this.property01 == true) { 

     $('#find-element'). .... // ... Do Something 
    } 
} 

Mais je ne suis pas sûr de savoir comment faire cela. Si j'Enroulez le code de file1.js avec un wrapper document prêt jQuery , la ligne à l'intérieur var abc = new ABC();file2.js jetteront une erreur, car il ne reconnaît plus la définition de la fonction dans file1.js. Puis-je utiliser jQuery à l'intérieur d'un prototype comme je l'ai expliqué ci-dessus? Comment puis je faire ça? Comment puis-je structurer mes fichiers pour permettre cela?

+0

il y a beaucoup d'informations manquantes ici (écrire un MCVE), mais très probablement ça va marcher ... avez-vous essayé? – Amit

+0

Pourquoi attendez-vous que le document soit chargé avant de définir une classe? Vous devriez faire des variables globales. – SLaks

+0

Vous pouvez garder everythig tel quel, faites juste attention à ne pas appeler la méthode 'doSomething' avant que le DOM ne soit prêt. – Teemu

Répondre

1

Cela devrait fonctionner correctement tant que jQuery est complètement chargé avant que file1.js et file1.js aient. Si vous les chargez explicitement dans le bon ordre, le $ sera disponible globalement, et les autres fichiers ne devraient pas avoir un problème de reconnaissance de cet objet. En fait, si vous chargez les choses correctement, vous ne devriez même pas avoir besoin d'une configuration prête pour le document pour accéder à $.

<script src="../jquery.js"></script> 
<script src="../file1.js"></script> 
<script src="../file2.js"></script> 

Si, pour une raison quelconque, vous avez des conflits avec l'objet $, vous pouvez aussi utiliser le mot jQuery pour faire vos appels: jQuery('#find-something')

+1

Vous aviez raison. C'était l'ordre de chargement des fichiers. – Greeso