8
votes

Quelle est la meilleure façon de vous assurer qu'un plugin JQuery ne écrase jamais une méthode natif jQuery?

J'écris un plugin JQuery, et je me demandais comment m'assurer que je n'écrase jamais jamais une future méthode natif jQuery.

Par exemple, mon plugin est appelé foo et utilisation est $ ('Sélecteur'). FOO () .

JQuery 2.6 a remarqué la popularité de FOO et a décidé qu'il l'inclurait dans le paquet principal. Il est également utilisé via $ ('sélecteur'). FOO () .

Je ne veux pas que mon foo écrase la foo natif de JQuery (ou d'autres affrontements).

C'est ce que je suis venu avec ... xxx

serait-ce le meilleur moyen de le faire?


1 commentaires

Si votre mise en œuvre de FOO est différente de celle de JQuery's est alors votre plugin aurait buggy ... Cela pourrait être une bonne pratique cependant, peut-être que je vais essayer :-)


4 Réponses :


0
votes

Vous voudriez probablement faire cela de manière similaire à la programmation de JavaScript régulière A getelementsbylassname Fonction - Vous vérifiez s'il existe et créez-le si non.


0 commentaires

2
votes

Je pense que vous seriez mieux avec:

$.foo = {
     doSomething: function() { /* do something*/ },
     doSomethingElse: function() { /* do something else*/ }
  }; 


1 commentaires

Merci pour votre réponse Karim79. Peut-être que je fais quelque chose de mal, mais quand je fais une alerte ($. Doulez-vous); i get non défini même si j'utilise jQuery 1.4 et alerte ); me donne le Tostring () de la fonction jQuery minifiée.



8
votes

Vous pouvez ignorer les instructions code> si code> et construire la définition de définition dans votre déclaration de fonction.

(function($){

  $.fn.foo = $.fn.foo || function () {
    // only used if $.fn.foo is undefined
  }

})(jQuery)


4 commentaires

C'est sexy! Merci beaucoup pour votre réponse. Je ne pense pas que quiconque puisse top avoir. J'oublie toujours d'exploiter l'évaluation du court-circuit et JavaScript renvoyant le premier Truthy Opérande.


@Alxed - Vous devez noter que cela n'est pas sûr pour les propriétés, par exemple .length , .acacactive et d'autres éléments de défaut sur 0 être remplacé ici, même lorsqu'il est utilisé par JQuery.


@NICK Il n'y a que trois propriétés de non-fonction sur le prototype JQuery: jQuery , longueur et sélecteur . Tant que vous ne nommez pas votre plugin aucun de ces trois, vous devriez aller bien.


En fait, je n'allais pas réinventer la propriété : p



0
votes

une version légèrement meilleure (performance-wise): xxx


0 commentaires