0

I have defined a function which returns object which has property and a method. using the returned object I am calling the method inside the object to get the value of the property in the object. but I didn't received what I expected.

function test(){

    return {
        a:'test property',
        fn:()=>{
             console.log('property', this.a);
        }
    }

}

 const obj = test();
 obj.fn() // what I expect is test property but I received undefined.

enter image description here

3

2 Answers 2

4

You have declared the function incorrectly. Remember that arrow functions do not have their own this like a regular function does.

You should declare it like this:

function test() {
  return {
    a: 'test property',
    fn() {
      console.log('property', this.a);
    },
  };
}
const obj = test();
obj.fn();

Sign up to request clarification or add additional context in comments.

2 Comments

Can you please explain me what is the difference between the both function. I am assigning a function to a fn key but you are defining a function in a object. At the end the function fn going to be called why it behaves different
arrow functions do not have their own "this" as regular functions
1

When you use a regular function this is scoped to how it is called. example

obj.fn()

obj is taken as your this

when you define using arrow function this is assigned on creation which points to the parent's context in your case its window

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.