call方法(Function.prototype.call)是用来改变某个方法被调用时的this指向。
官方描述:使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。
首先,call的常规用法(如下):
const obj = { name: 'test-object', }; function helper() { console.log('output'); console.log(this); console.log('name: ', this?.name); console.log('args: ', arguments); } helper.call(obj, 0, 1, 2);
然后,我们回到主题,看看 x.call.....call 这种用法,该如何理解。
直接看下方代码吧(特别是注释部分)
function foo() { console.log('foo -> this: ', this); } function fake() { console.log('fake -> this: ', this); } /** * 1. foo.call(fake) 性质过程描述 * 其等同于: * const key = Symbol('foo'); * fake[key] = foo; * fake[key](); * delete fake[key]; */ /** * 2. foo.call.call 可以将其理解为: * const call = foo.call; * 因为 foo.call === Function.prototype.call, * 所以 call === Function.prototype.call。 * 故, * call.call(fake, true); * 等同于(参考 1): * fake.call(true); * 所以,最后的输出为:'fake -> this: [Boolean: true]' */ foo.call.call(fake, true); // output: 'fake -> this: [Boolean: true]'
标签:foo,console,log,JS,call,fake,执行,true From: https://www.cnblogs.com/fanqshun/p/16746543.html