Risposta breve: this
punti alla vicina legato this
- nel codice fornito this
si trova nel campo di applicazione racchiude.
Più rispondere: funzioni freccia legano la loro this
quando vengono createdo not have this
, arguments
or other special names bound at all - quando viene creato l'oggetto del nome this
si trova nel perimetro che racchiude, non l'oggetto person
. Si può vedere più chiaramente spostando la dichiarazione:
var person = {
name = "Jason"
};
person.shout =() => console.log("Hi, my name is", this);
E ancora più chiaro quando tradotto in una vaga approssimazione della sintassi freccia in ES5:
var person = {
name = "Jason"
};
var shout = function() {
console.log("Hi, my name is", this.name);
}.bind(this);
person.shout = shout;
In entrambi i casi, this
(per la funzione shout) punta allo stesso campo in cui è definito person
, non al nuovo ambito a cui è assegnata la funzione quando viene aggiunto all'oggetto person
.
È Non puoi funzioni freccia rendere il lavoro in quel modo, ma, come @kamituel sottolinea in his answer, si possibile sfruttare il metodo di modello di dichiarazione più breve in ES6 per ottenere simili risparmio di spazio:
var person = {
name: "Jason",
// ES6 "method" declaration - leave off the ":" and the "function"
shout() {
console.log("Hi, my name is", this.name);
}
};
fonte
2015-03-01 19:59:40
http://www.es6fiddle.net/ – jason328