我的理解是,在javascript函数中是对象。基于这种理解,我已经编写了多年的代码。突然想到这个问题
typeof Object
是function
,但是function
是对象。我们使用(构造函数)函数创建一个对象(这是一个对象)。那么哪个先出现呢?对象还是功能?鸡肉还是鸡蛋?
这实际上如何工作?好像是循环引用?
答案 0 :(得分:0)
Object
构造函数由基础JS引擎提供,并且未作为JavaScript程序的一部分创建。
答案 1 :(得分:0)
Object
和Function
都是构造函数。像所有函数一样,它们也是“函数”的类型。由于原型层次结构的原因,它们也是Function
和Object
的实例:
console.log(Object instanceof Object) // true
console.log(Object instanceof Function) // true
console.log(Function instanceof Object) // true
console.log(Function instanceof Function) // true
这是因为函数是原型链接到对象原型的。
现在,当您调用 Object()
时,它会创建一个对象,而不是一个函数:
let o = Object()
console.log(typeof o) // object
console.log(o instanceof Object) // true
console.log(o instanceof Function) // false
let f = Function()
console.log(typeof f) // función
console.log(f instanceof Object) // true
console.log(f instanceof Function) // true because of prototype linking
因此,没有循环引用,只有一些令人困惑的名称。对象不是函数的实例,但是有一个称为Object()
的函数可以调用以产生对象实例。层次结构是对象->功能。函数从对象继承,但是Object
和Function
都是构造函数,它们会产生其对应类型的实例。
答案 2 :(得分:0)
我们使用(构造函数)函数创建一个对象(这是一个对象)。那么哪个先出现呢?对象还是功能?鸡肉还是鸡蛋?好像是循环引用?
我们可以使用构造函数创建对象,是的,但这不是唯一的方法。考虑对象文字。
我们可以使用Function
构造函数对象创建函数,是的,但这不是唯一的方法。通常使用函数定义来创建函数。
因此,您既不需要对象来创建函数,也不需要函数来创建对象。在典型的JS程序中,它们按照定义/求值的顺序排列。
不过,您可能会问到Object
和Function
。是的,它们和它们的原型对象之间设置了循环引用,但这也不是鸡或蛋的问题。您可以通过简单的分配来创建循环引用。它们之间并不真正相互依赖,这不像是一个用来创建另一个。它们分别存在。哪一个先来?我们不知道,它们都是环境创建的内置对象。我们不在乎,当我们的代码运行时它们都已经存在。