[Can'tBeSolved] Problem with .method() declaration using Es6 arrow syntax | Sololearn: Learn to code for FREE!
New course! Every coder should learn Generative AI!
Try a free lesson
+ 8

[Can'tBeSolved] Problem with .method() declaration using Es6 arrow syntax

I'm getting unexpected output when declaring a custom string method using ES6 Syntax. It is working expected when I use older method i.e. using function keyword, but not with arrow function. Cee my code to see problem. https://code.sololearn.com/W98vFyLcBVRv/?ref=app#js

3rd Dec 2020, 10:01 AM
Bibek Oli
Bibek Oli - avatar
12 Answers
+ 5
Mirielle[ INACTIVE ] Actually, `this` keyword can be used in arrow functions. Arrow functions do not create a new context for `this`. It will use the outer context. So if an arrow function is enclosed in a regular function, it's context is bound to the outer function's scope. The following is appropriate: https://code.sololearn.com/WuO2s2D1yvJX/?ref=app
3rd Dec 2020, 10:56 AM
Ore
Ore - avatar
+ 3
https://code.sololearn.com/csXo9FfFBfo9/?ref=app
3rd Dec 2020, 11:48 AM
🇮🇳Vivek🇮🇳
🇮🇳Vivek🇮🇳 - avatar
+ 3
Good. You have spread enough misinformation already. 1. You cannot use the "this" keyword inside an arrow function 2. you cannot get the current object inside an arrow function with this These are both wrong according to this code. https://code.sololearn.com/WuO2s2D1yvJX 3. the prototype of an object from the OP's code referrs to the current object The prototype is a property of the object that references another object on the heap. It does not refer to the current object. a = {} a !== a.prototype 4. the this keyword represented the object that called the function I don't know what you mean by ‘object that called the function’ but look at this code https://code.sololearn.com/WC9AdODGWMkC
3rd Dec 2020, 1:17 PM
Ore
Ore - avatar
+ 2
Mirielle[ INACTIVE ] so Saad😔 I was wondering since a long time why I am not being able to do this, finally got the reason. Thanks for the answer.
3rd Dec 2020, 10:16 AM
Bibek Oli
Bibek Oli - avatar
+ 2
Mirielle[ INACTIVE ] A better way to express what you are saying is “arrow functions do not have their own context”. As I have proved earlier, `this` can be used in an arrow function. Also, this != current object this = current context
3rd Dec 2020, 11:33 AM
Ore
Ore - avatar
+ 2
Well, I might have confused you by saying this = current context I should have said this = a reference to the object that owns the current execution context That is just a longer way of saying the same thing though. If `this` is the current object, it is expected that `this` remains the same even when a function is bound to another object's context. That does not happen so `this` is not a reference to the current object. The MDN link you shared explains it clearly. """ In most cases, the value of this is determined by how a function is called (runtime binding)... it may be different each time the function is called. ES5 introduced the bind() method to set the value of a function's this regardless of how it's called, and ES2015 introduced arrow functions which don't provide their own this binding (it retains the this value of the enclosing lexical context). """ Is that not clear enough for you?
3rd Dec 2020, 6:14 PM
Ore
Ore - avatar
+ 1
Mirielle[ INACTIVE ] I suggest read more about `this` from MDN. W3Schools is not a good learning site. David Carroll probably has more to say on that. MDN defines `this` as “A property of an execution context (global, function or eval) that, in non–strict mode, is always a reference to an object and in strict mode can be any value.” https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this See also: https://www.freecodecamp.org/news/how-to-understand-the-keyword-this-and-context-in-javascript-cd624c6b74b8/
3rd Dec 2020, 12:24 PM
Ore
Ore - avatar
+ 1
Mirielle[ INACTIVE ] `this` keyword is different for JavaScript. Partly because it existed way before JavaScript supported OOP. In most languages, `this` refers to the object SCOPE. In JavaScript, `this` refers to the bound CONTEXT. Context is the lexical environment a function is bound to. Scope is the current context of execution. https://code.sololearn.com/WC9AdODGWMkC/?ref=app
3rd Dec 2020, 12:44 PM
Ore
Ore - avatar
4th Dec 2020, 12:30 AM
🇮🇳Vivek🇮🇳
🇮🇳Vivek🇮🇳 - avatar
0
String.bind(this);
3rd Dec 2020, 10:26 AM
🇮🇳Vivek🇮🇳
🇮🇳Vivek🇮🇳 - avatar
0
MDN defines `this` as “A property of an execution context (global, function or eval) that, in non–strict mode, is always a reference to an object and in strict mode can be any value.” I think that is consistent with what I have said all along. In the section titled ‘Arrow Functions’, the following can be found: """ In arrow functions, this retains the value of the enclosing lexical context's this """
3rd Dec 2020, 6:19 PM
Ore
Ore - avatar
- 2
Salom
4th Dec 2020, 11:16 AM
Saidjon