当前位置: 首页 > 知识库问答 >
问题:

Typeof对象不是函数,即使它实现了[[Call]]

欧阳勇
2023-03-14

我是Javascript的新手,所以很抱歉,如果这有一个微不足道的答案。

根据ECMAScript语言规范,如果val的返回类型是对象(实现[[Call]]),则结果是字符串“function”。我不明白的是,为什么在下面的代码中,新创建的对象的类型不是“function”:

function FunctionCreator(){}

FunctionCreator.prototype = Function.prototype;

let obj = new FunctionCreator();

console.log(typeof obj); // object
console.log(obj.call); // ƒ call() { [native code] }

[[Call]]方法是用Function.prototype定义的,就像我相信它是为一个普通函数定义的一样,但是typeof返回对象。

共有1个答案

衡子安
2023-03-14

obj不是函数,而是通过new操作符创建的对象FunctionCreator是一个函数,但它不创建函数。只是制作它的原型功能。prototype(原型)不会生成它所创建的函数,它只会使对象继承无法有效使用的属性,因为它不是函数。

在Function.prototype.中定义了[[Call]]方法。

这可能是你所误解的<代码>函数。原型有一个调用方法,但这不是[[call]]内部方法。这只是一个名为call的方法。[[Call]]无法从外部访问(并且取决于JavaScript引擎的实现,它可能不存在;它是一种规范机制)。

要创建函数,您可以使用函数声明、函数表达式、方法定义等。(更多信息请见此处);或者,如果您无法避免它们,并且您知道与它们相关的危险,请使用avanew Function

 类似资料:
  • 我有我的问题的简单例子。有两个学生和三个科目。起初,学生1拥有所有科目,学生2没有科目。关系是一个学生和多个学科的关系。 我正在尝试使用jpa hibernate将subject1从学生1交换到学生2。在数据库中出现事务提交更改后:主题表的外键student_id发生了更改,但在java中,即使我从数据库加载学生1,对象仍然具有subject1。 主要代码: 提交后主题表如下所示。它显示id为1的

  • 本文向大家介绍typeof('abc')和typeof 'abc'都是string, 那么typeof是操作符还是函数?相关面试题,主要包含被问及typeof('abc')和typeof 'abc'都是string, 那么typeof是操作符还是函数?时的应答技巧和注意事项,需要的朋友参考一下 https://codeday.me/bug/20170805/49907.html

  • 问题内容: 可能重复: JavaScript:检查对象是否为数组? 为什么将对象数组视为对象而不是数组?例如: 问题答案: javascript的怪异行为和规范之一就是Array is 。 您可以通过以下几种方法检查变量是否为数组: 但是最可靠的方法是: 由于您使用jQuery标记了问题,因此可以使用jQuery函数:

  • 问题内容: 我记得在JPA或hibernate中有一个注释,告诉hibernate使用getId / setId方法而不是property(我们注释属性)。如果没有此设置,则getId会导致命中数据库并填充该对象的所有字段,这不是我想要的。有人知道该注释是什么吗? 例: 因此,当id已在hibernate项目代理对象中时,ticket.getProject.getId()导致命中数据库以获取项目。

  • 此语句在循环中运行,并在随机迭代时给出NullPointerException。

  • 问题内容: 我正在尝试在React中创建一个项目,并且正在使用Firebase。在我的react-redux- firebase项目中,有一行代码出错,但我无法解决。如何解决此“ TypeError:Object(…)不是函数” 我已经搜索了此问题,但无法解决该问题。 我正在关注一个React版本为16.4.1的教程。我不确定这是否是问题 index.js文件 如果我注释掉reatReduxFir