gpt4 book ai didi

javascript - String.call.call 类型?

转载 作者:太空宇宙 更新时间:2023-11-04 15:34:29 26 4
gpt4 key购买 nike

这是真的(在 Google Chrome 的控制台中运行):

typeof String.call.call === 'function'

但称其为 String.call.call()抛出一个错误,指出它不是一个函数:
未捕获类型错误:String.call.call 不是函数 于:1:13

为什么尝试调用函数(根据其 typeof 定义)会抛出错误,指出它不是函数?它实际上是一个函数吗?

请注意,这种情况会发生在其他类上,例如 Number、Function 或继承 .call 的其他类。方法。

最佳答案

让我们尝试将其分解为更易于管理的部分。

String 是一个构造函数(或者静态函数/构造函数混合体,无论你想怎么调用它),因此,它继承自 Function.prototype,因为它是一个函数。

call 是一个函数,它使用第一个参数中给定的上下文来执行其上下文(this):

console.log(String.call(true));
console.log(Array.call(null));
console.log(Function.call('so?'));
console.log(Object.call(/notice me/));

让我们看一下 Function.call() 的更官方定义:

The call() method calls a function with a given this value and arguments provided individually.

function.call(thisArg, arg1, arg2, ...)

现在,有趣的部分是注意到这三个是相同的:

'use strict';

var callRef = String.call; // Function.call, Array.call, Boolean.call, all of them are ===

console.log(String(/make me into a string/));
console.log(String.call(undefined, /make me into a string/));
console.log(callRef.call(String, undefined, /make me into a string/));

callRef.call(String) 的意思是,在 String 的上下文中调用 callRef(),也就是说,执行 String() 以及以下参数中提供的上下文和参数。

正如我们所记得的,上下文并不重要,但现在我们知道 callRef.call() 的第一个参数确实很重要,因为它决定了什么要执行的函数,因为它告诉 callRef() 它的上下文是什么,它会作为一个函数执行,并使用下一个参数中提供的上下文。

现在反射(reflection)最初的问题,当我们尝试执行 String.call.call() 时会发生什么?好吧,如果一个参数没有被指定,那么它就是undefined,并且我们知道typeof undefined !== 'function'

这是我的最终答案:

String.call.call() 确实是一个函数...但它所做的只是尝试将 undefined 作为函数执行,而这显然不是。

String.call.call();

我希望这是一个有趣且内容丰富的解释。

关于javascript - String.call.call 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44508484/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com