2016-05-14 11 views
0

Wie kann ich vermeiden, const self = this in JavaScript/Node.js in jeder Typ-Funktion zu tun?Vermeiden Sie Self = dies in JavaScript-Typ Funktionen

function Server(config) { 
    const self = this; 
    this.config = config; 

    setTimeout(function() { 
     console.log(self.config); 
    }, 2000); 
} 

Server.prototype.foo = function() { 
    const self = this; 

    setTimeout(function() { 
     console.log(self.config); 
    }, 4000); 
}; 

module.exports = Server; 

Es ist sehr fehleranfällig (verwende ich this oder self), weil Sie in Ihrem Umfang suchen. Ganz zu schweigen davon, dass es überflüssig erscheint, zusätzliche Variablen zu deklarieren.

+0

Es ist nur fehleranfällig, wenn Sie 'self' nicht für jede nachfolgende Operation verwenden – Alnitak

+0

' setTimeout' akzeptiert zusätzliche Argumente, die an den Callback übergeben werden können, wenn Sie dies bevorzugen, also 'setTimeout (function (self) {console.log (self.config)}, das) 'Du ' Ich muss dies jedoch in alten Versionen von FF und IE beheben. –

Antwort

1

können Sie Function.prototype.bind verwenden das Schlüsselwort this auf den vorgesehenen Wert zu setzen:

Server.prototype.listen = function() { 
    setTimeout(function() { 
    console.log(this.config); 
    }.bind(this)); 
}; 

Oder alternativ in einem ES2015 bereit Umgebung Sie arrow functions verwenden, die eine lexikalische diesen Wert haben:

Server.prototype.listen = function() { 
    setTimeout(() => { 
    console.log(this.config); 
    }); 
}; 
4

Angenommen, Sie haben ES6 (ich sehe die Verwendung von const), arrow functions sollte verfügbar sein. Weitere Informationen finden Sie in this section of the same page.

+0

Können Sie bitte ein Beispiel angeben? – Justin

+0

@Justin Arrow-Funktion wird nicht an 'this' gebunden –

+0

Schauen Sie sich das Dokument @Joseph an, mit dem der Dreamer Sie verbunden hat. Da ist ein Beispiel. – sheeldotme

Verwandte Themen