我对此代码感到困惑:
Function.prototype.apply.call(Math.floor, undefined, [1.75]); // 1
我阅读了这篇文章javascript apply and call methods and chain together,我理解了链接应用和调用方法的含义。
但是,我仍然对语法感到困惑。调用的正确语法是function.call(thisArg, arg1, arg2, ...)
。
但在这种情况下,为什么调用方法会采用这些三个参数(target
,thisArgument
,argumentsList
),这与{{1}相同}?
答案 0 :(得分:3)
实际上,call方法可以使用所有逗号分隔的参数并将其传递给被调用的方法。
正如你在这里看到的那样(target, thisArgument, argumentsList)
后两个参数作为apply方法的参数,我们知道apply方法需要一个参数数组,我们已经将第三个参数作为数组发送。
所以这里的执行可以简化为:
Math.floor.apply(undefined, [1.75]);
或只是Math.floor(1.75) // Obv with undefined as reference of this
答案 1 :(得分:1)
Function.prototype.apply.call(Math.max, undefined, [1,75]); // 1
上面的代码将 Function.prototype.apply 中的 thisArgu 更改为 Math.max
让我们谈谈将Function.prototype.apply中的thisArgu更改为Math.max
noramlly, Function.prototype.apply 中的 应为 Function.prototype
所以将Function.prototype.apply中的thisArgu更改为Math.max 意味着:
将 Function.prototype 更改为 Math.max ,如果在Function.prototype.apply()中执行时遇到'this'
因此,执行并遇到'this'时,可以像这样理解上面的代码:
Math.max.apply(undefined,[1,75])
现在你明白了吗?
如果我们继续,你会发现
Math.max.apply(undefined,[1,75])
可以理解为:
Window.max(1,75)//error;
所以,我猜这个'字'在Math.max函数内容中不存在,所以它没有错误;
答案 2 :(得分:0)
call()
的语法是:
someFunctionOrMethod.call(...)
因此,此代码调用apply
类型的Function
方法。
// Call the "apply()" method
Function.prototype.apply.call()
// With the following arguments passed to "apply"
(Math.floor, undefined, [1.75])