直接调用成员函数和通过其键调用成员函数之间有区别吗?

时间:2018-12-19 19:07:36

标签: javascript

我有一个异步功能:

async function f() {
   ...
}

我还有存储功能的对象:

const functions = {};
functions['f'] = f;

两者之间有区别吗?

await f();

和:

await functions['f']();

1 个答案:

答案 0 :(得分:4)

this的值有所不同。当将函数作为方法调用时,this将是被调用的对象。否则它将是全局对象,或在严格模式下为undefined

(async function() {

async function f() {
  console.log(this === functions);
}

const functions = {};
functions['f'] = f;

await f();

await functions['f']();

})();

有关更多信息,请参见MDN on this

要强制使用“独立”功能的上下文,可以将功能bind()移至原始对象:

const f = functions.f.bind(functions);

现在,当调用f()时,this将始终为functions