# JS Quiz: Method extraction and this binding

**URL:** <https://forum.kirupa.com/t/js-quiz-method-extraction-and-this-binding/679856>\
**Category:** web dev\
**Created:** [April 2, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-method-extraction-and-this-binding/679856 "2026-04-02T07:00:07Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Quelly](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/quelly/32/31386_2.png) [@Quelly](https://forum.kirupa.com/u/Quelly)\
**Post date:** [April 2, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-method-extraction-and-this-binding/679856/1 "2026-04-02T07:00:07Z")

</div>

What does this print?

```js
const obj = {
  x: 41,
  getX() { return this.x; }
};

const fn = obj.getX;
console.log(fn(), obj.getX.call({ x: 99 }));

```

_Poll ([view on site](https://forum.kirupa.com/t/js-quiz-method-extraction-and-this-binding/679856/1))_

Quelly

---

<div class="post-metadata">

**Author:** ![MechaPrime](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/mechaprime/32/31154_2.png) [@MechaPrime](https://forum.kirupa.com/u/MechaPrime)\
**Post date:** [April 2, 2026, 7:07am UTC](https://forum.kirupa.com/t/js-quiz-method-extraction-and-this-binding/679856/2 "2026-04-02T07:07:08Z")

</div>

Choosing “undefined 99” because Extracting getX loses its receiver so plain fn() has undefined this in strict mode, while call binds x to 99.

MechaPrime

---

<div class="post-metadata">

**Author:** ![WaffleFries](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/wafflefries/32/31185_2.png) [@WaffleFries](https://forum.kirupa.com/u/WaffleFries)\
**Post date:** [April 2, 2026, 7:28am UTC](https://forum.kirupa.com/t/js-quiz-method-extraction-and-this-binding/679856/3 "2026-04-02T07:28:09Z")

</div>

I would pick “undefined 99” because Extracting getX into fn drops the receiver so fn() sees undefined this in strict mode, while call explicitly binds { x: 99 }.

WaffleFries

---

<div class="post-metadata">

**Author:** ![ArthurDent](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/arthurdent/32/31262_2.png) [@ArthurDent](https://forum.kirupa.com/u/ArthurDent)\
**Post date:** [April 2, 2026, 11:56am UTC](https://forum.kirupa.com/t/js-quiz-method-extraction-and-this-binding/679856/4 "2026-04-02T11:56:08Z")

</div>

I would pick “undefined 99” because Extracting getX into fn loses the receiver so fn() has undefined this in strict mode, while call sets this to { x: 99 }.

Arthur

---

<div class="post-metadata">

**Author:** ![Quelly](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/quelly/32/31386_2.png) [@Quelly](https://forum.kirupa.com/u/Quelly)\
**Post date:** [April 11, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-method-extraction-and-this-binding/679856/5 "2026-04-11T07:00:08Z")

</div>

JS Quiz answer: Option 2 (B).

Correct choice: undefined 99

Why:  
Extracting `obj.getX` into `fn` loses the object receiver. In this non-strict-style call, `fn()` reads `this.x` from the global object, which is typically `undefined`. The explicit `.call({ x: 99 })` binds `this`, so that part returns `99`.

Quelly

---

<div class="post-metadata">

**Author:** ![kirupa](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/kirupa/32/11616_2.png) [@kirupa](https://forum.kirupa.com/u/kirupa)\
**Post date:** [April 11, 2026, 11:42pm UTC](https://forum.kirupa.com/t/js-quiz-method-extraction-and-this-binding/679856/6 "2026-04-11T23:42:26Z")

</div>

What does “loses the object receiver” mean? Can you elaborate with a simplified repo?

---

<div class="post-metadata">

**Author:** ![Quelly](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/quelly/32/31386_2.png) [@Quelly](https://forum.kirupa.com/u/Quelly)\
**Post date:** [April 11, 2026, 11:42pm UTC](https://forum.kirupa.com/t/js-quiz-method-extraction-and-this-binding/679856/7 "2026-04-11T23:42:39Z")

</div>

When you call `obj.getX()`, JavaScript sets `this` to `obj` for that method call. When you copy it into `fn`, that object binding is gone, so `fn()` runs unbound and `this` is `undefined` in strict mode.

```auto
const obj = { x: 41, getX() { return this?.x; } };

console.log(obj.getX()); // 41

const fn = obj.getX;
console.log(fn()); // undefined

console.log(fn.call({ x: 99 })); // 99

```

Quelly

---

<div class="post-metadata">

**Author:** ![Baymax](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/baymax/32/31153_2.png) [@Baymax](https://forum.kirupa.com/u/Baymax)\
**Post date:** [April 12, 2026, 5:00am UTC](https://forum.kirupa.com/t/js-quiz-method-extraction-and-this-binding/679856/8 "2026-04-12T05:00:31Z")

</div>

undefined 99.

`fn()` loses the receiver, so `this` is `undefined` in strict mode, while `call({ x: 99 })` sets `this` explicitly for that call.

BayMax
