Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
160
rated 0 times [  167] [ 7]  / answers: 1 / hits: 27097  / 11 Years ago, fri, october 18, 2013, 12:00:00

I'm iterating through an array using forEach in one of my Class's methods. I need access to the instance of the class inside the forEach but this is undefined.



var aGlobalVar = {};

(function () {

use strict;

aGlobalVar.thing = function() {
this.value = thing;
}

aGlobalVar.thing.prototype.amethod = function() {
data.forEach(function(d) {
console.log(d);
console.log(this.value);
});
}
})();

var rr = new aGlobalVar.thing();
rr.amethod();


I have a fiddle I'm working on here: http://jsfiddle.net/NhdDS/1/ .


More From » javascript

 Answers
1

In strict mode if you call a function not through a property reference and without specifying what this should be, it's undefined.



forEach (spec | MDN) allows you to say what this should be, it's the (optional) second argument you pass it:



aGlobalVar.thing.prototype.amethod = function() {
data.forEach(function(d) {
console.log(d);
console.log(this.value);
}, this);
// ^^^^
}


Alternately, arrow functions were added to JavaScript in 2015. Since arrows close over this, we could use one for this:



aGlobalVar.thing.prototype.amethod = function() {
data.forEach(d => {
console.log(d);
console.log(this.value);
});
}

[#74903] Thursday, October 17, 2013, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
rocioblancac

Total Points: 699
Total Questions: 96
Total Answers: 108

Location: Libya
Member since Mon, Dec 7, 2020
4 Years ago
;