看阮一峰老师的Reflect 有这么一行代码:
有了Reflect对象以后,很多操作会更易读。
Function
.prototype
.apply
.call(Math
.floor
, undefined
, [1.75])
Reflect
.apply(Math
.floor
, undefined
, [1.75])
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])
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])
都是等价的。 这只是脑力训练吧,不知道有什么实用的价值。