Javascript调用和应用方法

时间:2018-02-08 00:54:11

标签: javascript

我对此代码感到困惑:

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

我阅读了这篇文章javascript apply and call methods and chain together,我理解了链接应用和调用方法的含义。

但是,我仍然对语法感到困惑。调用的正确语法是function.call(thisArg, arg1, arg2, ...)。 但在这种情况下,为什么调用方法会采用这些三个参数(targetthisArgumentargumentsList),这与{{1}相同}?

3 个答案:

答案 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])