2015-04-06 3 views
2

Si je mets une fonction dans un objet que je peux utiliser une seule fois commeJavascript inheritence de manière jquery

function handle(selector) 
{ 
    return{ 
     elem:selector, 
     next:function(){ 
      return (this.nextSibling.nodeType==1) ? this.nextSibling : this.nextSibling.nextSibling; 
     } 
    } 
} 

ici, je peux dire handle.next() cela fonctionnera, mais si je veux dire handle.next().next().next() ma question est de savoir comment je peut utiliser de cette manière que jquery fait?

+1

Définissez une classe et toutes vos fonctions renvoient des instances de la classe. – Barmar

+0

la question est comment? – nikoss

+0

Renvoyez juste 'ceci' de chaque fonction. – Sergey

Répondre

1

En parlant de votre fonction, vous pouvez le modifier comme celui-ci pour le faire fonctionner:

function handle(selector) 
{ 
    if (typeof selector === 'string') { 
     selector = document.querySelector(selector); 
    } 
    return{ 
     elem:selector, 
     next:function(){ 
      return handle(selector.nextElementSibling); 
     } 
    } 
} 

Voir jsfiddle. UPD: Modifié le code pour prendre en charge à la fois les éléments et les sélecteurs de chaîne en tant que paramètre.

UPD 2: est sorti avec une variante alternative. Dans ce cas, nous étendons l'objet élément HTML natif et ajouter de nouvelles méthode prochaine:

function handle(selector) 
{ 
    if (typeof selector === 'string') { 
     selector = document.querySelector(selector); 
    } 
    selector.next = function() { 
     return handle(selector.nextElementSibling); 
    }; 
    return selector; 
} 

Fiddle est here.

+1

cela ne fonctionne pas comme il doit – nikoss

+0

quand je dis handle ("p"). Next(). Next(). InnerHTML renvoie undefined – nikoss

+0

Correction: vous pouvez maintenant passer * p * ou * document.querySelector ('p') * en tant que paramètre. –