2010-12-13 13 views
1

Betrachten Sie ein OOP-Modell. Ich wollte implementieren,Objektorientierte Programmierung in Javascript

funct1(arg).subfunct1(arg); ( 

Natürlich wie jQuery. wo haben Sie $(arg).subfn(arg)

Ich habe es erfolgreich für eine Unterfunktion getan. ABER,

funct1(arg).subfunct1(arg); // ==> works fine. 
funct1(arg).subfunct1(arg).subfunct(arg); // ==> doesnt work. 

Quelle ist:

var funct1=function() { 
    var dummy=new Object(); 
    dummy.subfunct1=bla bla; 
    dummy.subfunct2=bla bla; 
    return dummy; 
} 

Können Sie irgendwelche Heilmittel sagen.

Antwort

3

subfunct1 hat return this, um kettenfähige Aufrufe zu haben.

0

Das funktioniert nur in jQuery, weil die meisten Funktionen so eingerichtet sind, dass sie nach der Änderung das jQuery-Objekt zurückgeben, zu dem sie gehören (this), damit sie miteinander verkettet werden können.

Was kehren Ihre Funktionen zurück?

0

Es gibt eine Methode verkettbar Anrufe auf ein beliebiges Objekt ermöglichen ohnereturn this:

function chain(obj) { 
    return function() { 
     var Self = arguments.callee; Self.obj = obj; 
     if(arguments.length==0) return Self.obj; 
     Self.obj[arguments[0]].apply(Self.obj,[].slice.call(arguments,1)); 
     return Self; 
    } 
} 

Verbrauch:

function ClassA() { 
    this.prop1 = null; 
    this.prop2 = null; 
    this.prop3 = null; 
} 

ClassA.prototype = { 
    method1: function(argu) {this.prop1 = argu;}, 
    method2: function(argu) {this.prop2 = argu;}, 
    method3: function(argu) {this.prop3 = argu;} 
} 

var a = new ClassA(); 
chain(a)('method1',4)('method2',5)('method3',6)(); 

ref: http://www.javaeye.com/topic/748348 (in Chinesisch)

0

Dank für Anregungen:), zwischendurch habe ich ein paar Stunden ausprobiert, da ich nicht konzeptionell stark bin und wie folgt funktionierte.

var funct1=function() { 
    var dummy=new Object(); 
    var clone=dummy; 
    dummy.subfunct1=bla bla; //you have to return every time the clone object 
    dummy.subfunct2=bla bla; //you have to return every time the clone object 
    return dummy; 
} 

so die Funktion (auf jeden Fall) zu n-mal verkettet werden.
Hoffe das hilft jedem, der sucht wie ich :)

Verwandte Themen