Created
April 5, 2017 01:38
-
-
Save rafaelassumpcao/859c1e9ff4f4044f2ee452cd3e24e642 to your computer and use it in GitHub Desktop.
this exemplos
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//ES5 | |
ES5.greet() | |
//{ name: "Ronaiza", greet: ES5.greet() } | |
// Window | |
//resolvendo o problema do this no ES5 | |
var ES5 = { | |
name: 'Ronaiza', | |
greet: function(){ | |
var self = this; //guarda a referencia | |
console.log(this); //this = ES5 | |
//lembre-se da regra funções regulares sempre tem o this associado ao obj global (window) | |
setTimeout(function(){//função regular | |
console.log(self);//this = ES5 | |
console.log(this); //window | |
}) | |
} | |
} | |
ES5.greet() | |
// { name: "Ronaiza", greet: ES5.greet() } | |
// { name: "Ronaiza", greet: ES5.greet() } | |
// Window | |
const ES6 = { | |
name:'Ronaiza', | |
greet: () => console.log(this)//compartilha do escopo portanto foi definido no global Window | |
} | |
ES6.greet() | |
//Window | |
//o problema aqui é resolvido envolvendo o arrow em um escopo com o this que aponta pro obj | |
const ES6 = { | |
name:'Ronaiza', | |
greet: function(){ | |
const arrow = () => console.log(this);//escopo lexico this compartilhado portanto refenciando o obj | |
arrow(); | |
} | |
} | |
ES6.greet() | |
//{ name: "Ronaiza", greet: ES6.greet() } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment