Bird
Raised Fist0
Javascriptprogramming~20 mins

this in objects in Javascript - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Master of this in Objects
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this code?
Consider the following JavaScript code. What will be logged to the console?
Javascript
const obj = {
  value: 42,
  getValue: function() {
    return this.value;
  }
};
console.log(obj.getValue());
A42
Bundefined
CTypeError
Dnull
Attempts:
2 left
💡 Hint
Remember, inside a method, 'this' refers to the object before the dot.
❓ Predict Output
intermediate
2:00remaining
What does this code output?
Look at this code snippet. What will it print?
Javascript
const obj = {
  value: 10,
  getValue: () => this.value
};
console.log(obj.getValue());
A10
Bundefined
CTypeError
D0
Attempts:
2 left
💡 Hint
Arrow functions do not have their own 'this'.
❓ Predict Output
advanced
2:00remaining
What is the output of this code?
What will this code print to the console?
Javascript
const obj = {
  value: 5,
  getValue: function() {
    const inner = function() {
      return this.value;
    };
    return inner();
  }
};
console.log(obj.getValue());
Aundefined
B5
CTypeError
DReferenceError
Attempts:
2 left
💡 Hint
Regular functions have their own 'this' depending on how they are called.
❓ Predict Output
advanced
2:00remaining
What will this code output?
Analyze the following code and select the correct output.
Javascript
const obj = {
  value: 7,
  getValue: function() {
    const inner = () => this.value;
    return inner();
  }
};
console.log(obj.getValue());
Aundefined
Bnull
CTypeError
D7
Attempts:
2 left
💡 Hint
Arrow functions inherit 'this' from their surrounding context.
🧠 Conceptual
expert
2:00remaining
Which option causes a TypeError when accessing 'this.value'?
Which of the following code snippets will cause a TypeError when trying to access 'this.value'?
A
const obj = { value: 1 };
const getValue = obj.getValue;
getValue();
B
const obj = { value: 1, getValue() { return this.value; } };
const getValue = obj.getValue.bind(obj);
getValue();
C
const obj = { value: 1, getValue() { return this.value; } };
const getValue = obj.getValue.bind(null);
getValue();
D
const obj = { value: 1, getValue() { return this.value; } };
obj.getValue();
Attempts:
2 left
💡 Hint
Binding 'this' to null in strict mode can cause errors.

Practice

(1/5)
1. What does this refer to inside a regular method of an object in JavaScript?
easy
A. The object itself
B. The global window object
C. Undefined
D. The method's name

Solution

  1. Step 1: Understand this in object methods

    Inside a regular function defined as a method of an object, this refers to the object that owns the method.
  2. Step 2: Compare with other contexts

    Unlike arrow functions or global functions, regular methods bind this to the object itself.
  3. Final Answer:

    The object itself -> Option A
  4. Quick Check:

    this in object method = object [OK]
Hint: Remember: regular methods use this as the object [OK]
Common Mistakes:
  • Thinking this is always global
  • Confusing arrow functions with regular functions
  • Assuming this is the method name
2. Which of the following is the correct way to define a method that uses this inside an object?
easy
A. const obj = { greet: () => console.log(this.name) };
B. const obj = { greet: function() => console.log(this.name) };
C. const obj = { greet() { console.log(this.name); } };
D. const obj = { greet: function => console.log(this.name) };

Solution

  1. Step 1: Identify correct method syntax

    const obj = { greet() { console.log(this.name); } }; uses the concise method syntax with a regular function, which correctly binds this to the object.
  2. Step 2: Check other options for errors

    const obj = { greet: () => console.log(this.name) }; uses an arrow function, which does not bind this to the object. Options B and D have invalid syntax for function definitions.
  3. Final Answer:

    const obj = { greet() { console.log(this.name); } }; -> Option C
  4. Quick Check:

    Regular method syntax = const obj = { greet() { console.log(this.name); } }; [OK]
Hint: Use regular functions, not arrow functions, for methods [OK]
Common Mistakes:
  • Using arrow functions for methods
  • Incorrect function syntax inside objects
  • Confusing method shorthand with arrow functions
3. What will be the output of the following code?
const person = {
  name: 'Alice',
  greet() {
    console.log(this.name);
  }
};
person.greet();
medium
A. Alice
B. undefined
C. Error
D. person

Solution

  1. Step 1: Identify this inside greet method

    The method greet is a regular function inside the person object, so this refers to person.
  2. Step 2: Access the name property

    Since this is person, this.name is 'Alice'. The console logs 'Alice'.
  3. Final Answer:

    Alice -> Option A
  4. Quick Check:

    this.name = 'Alice' [OK]
Hint: Regular method this points to the object [OK]
Common Mistakes:
  • Expecting undefined because of arrow function confusion
  • Thinking this is global
  • Assuming method returns error
4. Find the error in this code and fix it:
const car = {
  brand: 'Toyota',
  showBrand: () => {
    console.log(this.brand);
  }
};
car.showBrand();
medium
A. No error, code works fine
B. Add .bind(car) to arrow function
C. Replace this.brand with car.brand
D. Change arrow function to regular function: showBrand() { console.log(this.brand); }

Solution

  1. Step 1: Identify arrow function issue

    Arrow functions do not have their own this. Here, this.brand is undefined because this is not bound to car.
  2. Step 2: Fix by using regular function

    Changing showBrand to a regular method binds this to car, so this.brand correctly accesses 'Toyota'.
  3. Final Answer:

    Change arrow function to regular function: showBrand() { console.log(this.brand); } -> Option D
  4. Quick Check:

    Regular function binds this correctly [OK]
Hint: Avoid arrow functions for object methods needing this [OK]
Common Mistakes:
  • Using arrow functions for methods
  • Trying to bind this on arrow functions
  • Ignoring this context rules
5. You want to create an object with a method that returns a greeting using the object's name. Which code correctly uses this to achieve this?
const user = {
  name: 'Bob',
  greet: ???
};
console.log(user.greet());
hard
A. greet: () => `Hello, ${this.name}!`
B. greet() { return `Hello, ${this.name}!`; }
C. greet: function() => `Hello, ${this.name}!`
D. greet: function { return `Hello, ${this.name}!`; }

Solution

  1. Step 1: Check method syntax and this binding

    greet() { return `Hello, ${this.name}!`; } uses a regular method syntax, so this correctly refers to the user object.
  2. Step 2: Validate other options

    greet: () => `Hello, ${this.name}!` uses an arrow function, which does not bind this to the user object. Options B and C have invalid syntax for function definitions.
  3. Final Answer:

    greet() { return `Hello, ${this.name}!`; } -> Option B
  4. Quick Check:

    Regular method with this = greet() { return `Hello, ${this.name}!`; } [OK]
Hint: Use regular methods for this access in objects [OK]
Common Mistakes:
  • Using arrow functions for methods
  • Incorrect function syntax
  • Expecting this to work in arrow functions
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard