I have written this code as a solution to the problem but it causes this error.
TypeError: _this is undefined
// The global variable
const s = [23, 65, 98, 5];
Array.prototype.myMap = (callback) => {
const newArray = [];
for(let i = 0; i < this.length; i++){
newArray.push(callback(this[i]))
}
return newArray;
};
const new_s = s.myMap((item) => item * 2);
**Your browser information:**
User Agent is: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:104.0) Gecko/20100101 Firefox/104.0
Challenge: Functional Programming - Implement map on a Prototype
Link to the challenge:
Should be
Array.prototype.myMap = function (callback) {
Arrow functions don’t bind this
, so attempting to access it in an arrow function is going to error.
Eg this.length
– this
is undefined
(or is whatever this
happens to be in the scope you run your function), so it probably doesn’t have a length.
Arrow functions aren’t just “the new way of writing functions”, they’re a syntax for anonymous functions and they work slightly differently, they aren’t a 1-to-1 replacement. In this case you want a function defined using the function
keyword because you need it to have its own this
context.
Edit: Compare with when you call your method, for example:
[1,2,3].myMap((num) => num * 2)
The callback is an arrow function, that’s no problem: it takes a number and returns that number multiplied by 2, no this
or anything
3 Likes