2011-09-27 41 views
10

que tienen un objeto:¿Cómo puedo encadenar mis llamadas a métodos?

var mubsisapi = { 
     step1 : function(){alert("a")}, 
     step2 : function(){alert("b")} 
    } 

$.extend(false, mubsisapi) 
mubsisapi.step1().step2(); 

Es dar step1() pero no dan step2(). step2() no da una alerta. ¿Cómo puedo hacer esto?

+0

Editado para eliminar las referencias a JSON ... que no está utilizando. – Quentin

Respuesta

15

No JSON, pero objeto javascript. No es fluent, pero puede ser:

var mubsisapi = { 
     step1 : function(){alert("a"); return this;}, 
     step2 : function(){alert("b"); return this;} 
    } 

$.extend(false, mubsisapi) 
mubsisapi.step1().step2(); 
9

Debe devolver this de la función si desea encadenarlo.

+0

+1 me gané :) – AlienWebguy

+0

+1, soy demasiado lento hoy – Joe

1

No puedes encadenar su función de llamadas. Usted tiene que llamar a ellos por separado:

mubsisapi.step1(); 
mubsisapi.step2(); 

o puede cambiar su función de paso 1 para que les puede encadenar:

var mubsisapi = { 
     step1 : function(){alert("a"); return mubsisapi;}, 
     step2 : function(){alert("b")} 
    } 

$.extend(false, mubsisapi) 
mubsisapi.step1().step2(); 
+0

Incorrecto :) Eliminar antes de recibir una downvoted. – AlienWebguy

+0

Gracias a todos –

3

Sí, su objeto debe tener este aspecto:

var mubsisapi = { 
    step1 : function(){alert("a"); return this; }, 
    step2 : function(){alert("b"); return this; } 
} 

volviendo a sí mismo para permitir el encadenamiento.

2
var mubsisapi = { 
     step1 : function(){alert("a"); return mubsisapi;}, 
     step2 : function(){alert("b"); return mubsisapi;} 
    } 
Cuestiones relacionadas