function Desciples(firstname, attributes) { this.firstname = firstname; this.attributes = attributes; this.listAttributes = function() { return this.attributes.map(function (attrib) { console.log(this.firstname + " did " + attrib); }); }; } let desciple1 = new Desciples("John", [ "Author of Gospel of John ", "Author of Reveleations", "Desicple that Jesus loved" ]); desciple1.listAttributes();
retuns
"undefined did Author of Gospel of John "
"undefined did Author of Reveleations"
"undefined did Desicple that Jesus loved"
But if we change it to
this.listAttributes = function() { return this.attributes.map(attrib => { console.log(this.firstname + " did " + attrib); });
"John did Author of Gospel of John "
"John did Author of Reveleations"
"John did Desicple that Jesus loved"
We can also create local variable to the function and assign this to it
this.listAttributes = function() { self = this; return this.attributes.map(function (attrib) { console.log(self.firstname + " did " + attrib); }); };
We can also use the BIND on the function like:
this.listAttributes = function() { return this.attributes.map(function (attrib) { console.log(this.firstname + " did " + attrib); }.bind(this)); };
Or the MAP has a second paramenter and we can pass this there that will also work
this.listAttributes = function() { return this.attributes.map(function (attrib) { console.log(this.firstname + " did " + attrib); },this); };