Stack Overflow Asked by Carlos Daniel on September 25, 2020
let student = {
fname: "Carlos",
lname: 'Dubón',
sayHi(){
alert(`Hi my name is ${this.fname}`);
},
sayBye: function() {
alert(`Bye ${this.fname}`);
},
sayHiAgain: ()=> {
alert(`Hi my name is ${this.fname}`);
}
}
student.sayHiAgain();
I’m new to OOP in Javascript, I understand that the 3 ways in which I wrote a method work exactly the same.
student.sayHi();
works and shows up the alert => "Hi my name is Carlos"
but student.sayHiAgain();
shows up the alert => "Hi my name is undefined"
What am I missing?
When using arrow functions, it uses lexical scoping meaning that it refers to it's current scope and no further past that, i.e., binds to the inner-function and not to the object itself.
An arrow function expression is a syntactically compact alternative to a regular function expression, although without its own bindings to the this, arguments, super, or new.target keywords. Arrow function expressions are ill suited as methods, and they cannot be used as constructors.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
Correct answer by Harben on September 25, 2020
Arrow functions have no “this”
Arrow functions are special: they don’t have their “own” this. If we reference this from such a function, it’s taken from the outer “normal” function.
let student = {
fname: "Carlos",
lname: "Dubón",
sayHi: function () {
console.log(`Hi my name is ${this.fname}`);
},
sayBye: function () {
console.log(`Bye ${this.fname}`);
},
sayHiAgain: function () {
console.log(`Hi my name is ${this.fname}`);
},
};
student.sayHiAgain();
Answered by Mario on September 25, 2020
4 Asked on November 10, 2021 by m-r_dino
1 Asked on November 10, 2021 by carboneum
1 Asked on November 10, 2021 by josh-loecker
1 Asked on November 10, 2021 by mattblack
2 Asked on November 10, 2021 by swing1234
5 Asked on November 10, 2021 by eskimo4
2 Asked on November 10, 2021 by abdi
0 Asked on November 10, 2021 by newtothecrew
1 Asked on November 10, 2021 by eli-turasky
1 Asked on November 10, 2021 by anu-john
1 Asked on November 10, 2021
1 Asked on November 10, 2021 by abie
amazon dynamodb amazon dynamodb data modeling amazon dynamodb index dynamodb queries
0 Asked on November 10, 2021 by nirjal-paudel
1 Asked on November 10, 2021 by rfkid
0 Asked on November 10, 2021 by felixc
4 Asked on November 7, 2021 by gringo
9 Asked on November 7, 2021 by riko-pramayudi
1 Asked on November 7, 2021 by tiredwater
Get help from others!
Recent Questions
Recent Answers
© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP