2017-09-30 9 views
0

J'ai cherché un moyen d'étendre une fonction d'une manière simple, comme dans C# extension method.javascript fonction de chaînage/fonction étend en utilisant l'expression IIFE

J'ai essayé la déclaration suivante que j'ai trouvée dans cet article Method Chaining in JavaScript et qui fonctionne bien.

var FOO = function(){ 
    this.whateverFunc = function(){ 
     console.log("whatever func"); 
    } 
}; 
FOO.prototype.first = function(){ 
    console.log("first func"); 
    return this; 
}; 
FOO.prototype.second = function(){ 
    console.log("second func"); 
    return this; 
}; 

Ensuite, je peux enchaîner:

var foo = new FOO(); 
foo.first().second(); 
//Output 
//first func 
//second func 

MAIS: Mes projets a le "modèle" suivant:

var FOO = (function(){ 
    var foo{ 
     firstFunc: function(){ 
      //implement 
     }, 
     secondFunc: function(){ 
      //implement 
     }, 
    } 
    return foo; 
}()); 

Il ne fonctionne pas même si je ne l'utilise IIFE.

var FOO = function() { var foo{}; return foo; }; 

Existe-t-il un moyen d'utiliser la fonction de chaînage dans ce motif? Comment pourrais-je accomplir ceci (si c'est possible!):

Merci.

Répondre

2

Le seul problème avec le code suivant

MAIS: Mes projets les éléments suivants sont "pattern":

manque = à foo déclaration.

Si IIFE utilise la fonction fléchée, les parenthèses d'invocation doivent être la dernière partie de IIFE, et non les parenthèses externes.

var FOO = (function() { 
 
    var foo = { 
 
    firstFunc: function() { 
 
     //implement 
 
     console.log(1); 
 
     return this 
 
    }, 
 
    secondFunc: function() { 
 
     //implement 
 
     console.log(2); 
 
     return this 
 
    } 
 
    } 
 
    return foo; 
 
})(); 
 

 
FOO.firstFunc().secondFunc()

+0

Vous avez raison, et je ne savais pas que cela est possible avec Ia vie, juste retour « ce » et il peut être enchaînée, Grand. Merci beaucoup; –