Interval an Objekt hängen

hoctar

Erfahrenes Mitglied
Hallo :)
ich versuche ein Intveral an ein Objekt anzuhängen, leider wird er beim aufruf von "stopInterval" nicht erkannt.

Code:
$.fn.extend({
    setInterval: function() {
        this._interval = setInterval(function() {
            alert('test');
        });
    },
    stopInterval: function() {
        clearInterval(this._interval);
    }
});
 
Moin,

dir geht beim Interval der Bezug zum Objekt verloren, denn ein Aufruf per setInterval() wird im globalen Scope ausgeführt...this bezieht sich dann auf das window-Objekt.

Lösung: Closures:

Code:
$.fn.extend({
    setInterval: function() {
    var _this=this;
        _this.count=0;
        this._interval = setInterval(function() {
            alert('Meldung#'+(++_this.count));
            if(_this.count==3)
            {
              alert('Schluss mit alert');
              _this.stopInterval();
            }
            
        },3000);
    },
    stopInterval: function() {
        clearInterval(this._interval);
    }
});
 
Achso, also wenn ich window.setInterval(..) aufrufe, ist this in der Interval Methode die Reference auf window, weil setInterval eine Methode von window ist.

Wird bei Javascript die Reference immer mit ' = ' übergeben ? Wie kann ich z.B. eine Reference einer Funktion übergeben oder zurüchgeben ?

Zum Beispiel:
Code:
$.fn.extend({
    arr[],
    getArr: function() {
        return this.arr;
    },
    modifyArr: function() {
        var arr = this.getArr();
        arr[0] = 'text';
    }
});

Wird nun arr verändert ?
 
Achso, also wenn ich window.setInterval(..) aufrufe, ist this in der Interval Methode die Reference auf window, weil setInterval eine Methode von window ist.
jo, genau so.

Wird bei Javascript die Reference immer mit ' = ' übergeben ? Wie kann ich z.B. eine Reference einer Funktion übergeben oder zurüchgeben ?

Das = ist ein Zuweisungsoperator, sonst nichts.

Zum Beispiel:
Code:
$.fn.extend({
    arr[],
    getArr: function() {
        return this.arr;
    },
    modifyArr: function() {
        var arr = this.getArr();
        arr[0] = 'text';
    }
});

Wird nun arr verändert ?

Wenn du jenes:
Code:
 arr[],
dahingehend änderst:
Code:
 arr:[],
...dann wird die arr-Eigenschaft des Objektes geändert(so, wie es momentan da steht, ist es schlicht ein Syntax-Fehler)

Und ja, so geht es in dem Beispiel, this.getAttr() liefert eine Referenz.
 
Und wie bekomme ich von arr eine Kopie?

In PHP, C etc. bekommt man ja eine Referenze mit ' var = &$arr ', also mit dem ' & ' Zeichen. WIe macht man das nun in Javascript?
 

Neue Beiträge

Zurück