2016-04-19 21 views
-1

Wenn ich eine Methode eines es6 Klasse von einem Rückruf anrufen kann ich nicht zu this als mein Objekt beziehen mehr:diese/Selbst in es6 Klasse

class store{ 
    constructor(){ 
    this.value = 10; 
    }; 

    printValue(self){ 
    console.log(this); 
    console.log(self);//the value that I want print 
    }; 
}; 

class undefinedClass{ 
    constructor(store){ 
    this.store = store; 
    }; 

    storeQuery(){ 
    let ff = this.store.printValue; 
    setTimeout(ff, 300, this.store); 
    }; 
}; 

let i = new store(); 
let b = new undefinedClass(i); 
b.storeQuery(); 

Wenn ich rufe b.storeQuery() tha Wert, Ich möchte drucken ist der zweite. Gibt es einen eleganteren Weg, das zu tun?

+0

Sie scheinen nicht den 'self' Parameter in' printValue' zu ​​werden vorbei .. Was soll es sein? – Tuvia

+0

Siehe auch [Wie man auf den richtigen 'this/context innerhalb eines Rückrufs zugreifen?] (Http://stackoverflow.com/q/20279484/218196) –

Antwort

0

Wie @ Alex sagen, mit einem .bind

Die Dokumentation ist here

class store{ 
 
    constructor(){ 
 
    this.value = 10; 
 
    }; 
 

 
    printValue(){ 
 
    
 
    console.log(this.value);//the value that I want print 
 
    }; 
 
}; 
 

 
class undefinedClass{ 
 
    constructor(store){ 
 
    this.store = store; 
 
    }; 
 

 
    storeQuery(){ 
 
    setTimeout(this.store.printValue.bind(this.store), 300); 
 
    }; 
 
}; 
 

 

 
let i = new store(); 
 
let b = new undefinedClass(i); 
 

 
    
 
b.storeQuery();

0

Wenn Sie die Funktionsreferenz eines Objekts in JavaScript verwenden, wird die Einstellung ThisBinding für dieses Objekt verloren gehen.

Sie können die ThisBinding zu irgendetwas mit Function.prototype.bind(). In diesem Fall würden Sie etwas wie ff.bind(this.store) verwenden.

+0

alex - Bitte beachten Sie meinen Kommentar hier: http: // stackoverflow. com/questions/36722798/this-self-in-es6-klasse # comment61030536_36722798 Wie adressierst du das? – Tuvia

+0

Oder verwenden Sie eine Pfeilfunktion. 'printValue' erwartet sowieso ein Argument. – zeroflagL

Verwandte Themen