2016-03-31 2 views
0

J'essaie de comprendre comment fonctionne la fonction chaînée et en particulier comment est-il possible de passer l'élément sélectionné aux fonctions chaînées.Comment passer l'élément sélectionné à 'ceci' dans les fonctions chaînées

En supposant que nous avons une fonction enchaînée comme suit:

var func = {}; 
func.remove= function() { 
    $(this).remove(); 
} 

Comment puis-je sélectionner un élément par jQuery ou JavaScript et le transmettre à la fonction enchaînée comme suit:

var elm = $("foo"); 
elm.func.remove(); 

OU

var elm2 = document.getElementById("foo"); 
elm2.func.remove(); 
+1

Toutes méthode est enchaînée, est une fonction qui retourne un objet. Cela permet au développeur d'appeler simplement des méthodes sur cet objet retourné. Votre premier exemple ('func, .remove') n'est PAS une méthode chainable car il ne retourne rien. –

+0

Voir ceci: http://stackoverflow.com/questions/1768150/how-to-add-a-function-to-jquery –

Répondre

3

Une fonction chaînée est une méthode qui retourne l'objet sur lequel elle est appelée (ainsi elle peut t renvoie l'élément lui-même sauf si vous étendez les objets DOM natifs, ce qui n'est pas recommandé).

func n'est pas chaîné car ce n'est pas une fonction du tout. remove n'est pas enchaîné avant de ne pas renvoyer l'objet auquel il appartient.

Si vous souhaitez effectuer des fonctions chaînées qui fonctionnent avec un élément, vous devez définir un objet, définir des méthodes chaînées sur cet objet et stocker l'élément en tant que propriété de cet objet.

Par exemple:

function MyConstructor(element) { 
    this._element = element; 
} 

MyConstructor.prototype.doA = function doA() { 
    console.log(this._element); 
    return this; 
}; 

MyConstructor.prototype.doB = function doB() { 
    element.style.display = "none"; 
    return this; 
}; 

var example = new MyConstructor(document.getElementById('foo')); 
example.doA().doB(); 
+0

Merci beaucoup, vos explications étaient vraiment utiles. – sam