2010-04-08 11 views
0

Je suis relativement novice en matière de javascript, mais j'ai entrepris une tâche pour mieux m'y familiariser. Cependant, je rencontre des problèmes avec jQuery. Le javascript suivant est le code qui est dans un plugin jQuery tiers et j'aimerais pouvoir remplacer la fonction funFunction() ici pour faire ma propre implémentation. Est-ce possible, si oui, comment puis-je le faire? Je fais une bonne quantité de recherche et ont essayé un certain nombre de méthodes pour des raisons impérieuses de la fonction à l'aide des choses comme:Surcharger les fonctions profondes en javascript

jQuery.blah.funFunction = function() { alert("like this"); }; 

Code principal:

(function($) { 
    $.extend({ 
     blah: new function() { 
      this.construct = = function(settings) { 
       //Construct... stuff 
      }; 
      function funFunction() { 
      //Function I want to override 
      } 
     } 
    }); 
})(jQuery); 

Pour ceux qui sont plus intéressés que je suis en train de Remplacer tablesorter afin que la seule façon pour un utilisateur de trier une colonne est dans l'ordre croissant seulement.

Edit:

Il y a une installation wordpress qui utilise WP-Table-Reloaded qui à son tour utilise ce plugin. Je ne veux pas changer le code de base pour ce plugin car s'il y avait une mise à jour, je devrais alors m'assurer que mon prédécesseur savait exactement ce que j'avais fait.

J'ai programmé pendant longtemps et je pense que je devrais pouvoir facilement prendre du javascript tout en regardant jQuery. Je sais exactement ce que je dois faire pour cela, mais pas comment je peux remplacer cette fonction.

+1

Juste une pensée: jQuery n'est pas le moyen si vous voulez vous familiariser avec Javascript. Essayez d'abord le Javascript pur. – Abbas

+0

Vous ne pouvez pas remplacer cela ... c'est une variable locale et n'est disponible que dans la portée où elle a été définie (et dans toutes les fermetures). – James

+0

Je vais offrir un vote dissident - si vous êtes familier avec la programmation en général, vous devriez être capable d'apprendre Javascript et jQuery en même temps, si vous gardez les concepts clairs. Rappelez-vous juste que jQuery * est * Javascript, et qu'il exploite la flexibilité du langage pour fournir des outils et des fonctionnalités. – Pointy

Répondre

2

La bonne chose à propos jQuery est que si un plugin ne fait pas tout à fait ce que vous voulez, vous pouvez

  • Rechercher un autre plug-in qui fait la même chose;
  • Prenez le plug-in, et si elle est GPL suffit de le fixer

Mon expérience est que la plupart des plugins sont assez bons, mais ils ne sont pas écrits par des divinités si parfois il y a des problèmes ou parfois ce que vous avez juste besoin arrive être en désaccord avec ce que le concepteur a anticipé. Vous devriez vraiment réfléchir sérieusement à ce que vous voulez faire et à vos besoins, et en tant que débutant, quel genre d'hypothèses sur la «bonne façon de faire les choses» que vous apportez à la fête. Chaque environnement de programmation a sa propre personnalité, qui est souvent presque une entité culturelle. Les choses peuvent sembler étranges, ou mauvaises, ou moche, mais en tant qu'étranger, vous devez suspendre votre jugement jusqu'à ce que vous soyez vraiment habitués à tous les idiomes.

+0

Hey, j'apprécie votre commentaire, je vais ajouter un peu plus d'informations à la fin pour savoir pourquoi je ne veux pas réécrire le plugin. –

+1

@PintSizedCat - Quelles que soient vos préférences ... malheureusement ce n'est pas grave dans ce cas, vous ne pouvez pas éditer ce que vous voulez éditer sans le faire: a) ** à l'intérieur ** du plugin ou b) un autre plugin , peut-être le vôtre. –

+0

Ok, je vais laisser ouverte au cas où quelqu'un trouverait une façon fantastique de le faire;) –

0

Qui se soucie des mises à jour de bibliothèques mineures de toute façon? Tant que la version utilisée fait ce qui est nécessaire et n'a aucun bogue applicable, il n'y a pas de gain de mise à niveau.

Dans tous les cas, je ne recommanderais jamais de récupérer une fonction parent accessible sous forme de chaîne comme ceci: functionAsString=""+functionName éditer ce qui doit être édité, puis régénérer la fonction: functionName=eval("("+functionAsString+")"). Mais il est possible de le faire.

Différents navigateurs renvoient des résultats légèrement différents lorsque vous convertissez une fonction en chaîne, mais ce sont toutes des déclarations valides pour cette fonction exacte, vous devriez donc être en mesure de sortir des différences.

Vous pouvez également récupérer le fichier de script à l'aide d'un appel ajax, puis procédez comme indiqué ci-dessus. Je ne le recommanderais quand même pas.

Questions connexes