理解Function.prototype.apply.call(fn,thisArg,args)

mac2025-07-11  3

看阮一峰老师的Reflect 有这么一行代码:

有了Reflect对象以后,很多操作会更易读。

// 老写法 Function.prototype.apply.call(Math.floor, undefined, [1.75]) // 1 // 新写法 Reflect.apply(Math.floor, undefined, [1.75]) // 1

Function.prototype.apply.call看起来有点迷糊… 仔细进行分解,首先,

fn.call(thisArg, arg1, arg2, ...) fn.apply(thisArg, [arg1, arg2, ...])

这两种基本形式都等价于

thisArg.fn(arg1, arg2, ...)

那么

Function.prototype.apply.call(Math.floor, undefined, [1.75]) // 1 // <=> Math.floor.apply(undefined, [1.75]) // <=> let f = Math.floor.bind(undefined); f(1.75)

同理

Function.prototype.apply.apply(Math.floor, [undefined, [1.75]]) Function.prototype.call.call(Math.floor, undefined, 1.75) Function.prototype.call.apply(Math.floor, [undefined, 1.75])

都是等价的。 这只是脑力训练吧,不知道有什么实用的价值。

最新回复(0)