换句话说,第一个是什么?一只鸡蛋还是一只母鸡?自从我读到这篇文章后,我无法理解JavaScript是如何实现的:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function#Properties_and_Methods_of_Function。
正如您在控制台中看到的那样:
>Object instanceof Function
true
>new Function() instanceof Object
true
似乎是一个致命的循环。
为什么所有这些:
typeof new Object()
typeof new Array()
typeof new Date()
typeof new RegExp()
typeof new Number()
typeof new Boolean()
typeof new String()
返回“对象”,但是:
typeof new Function()
返回“功能”
似乎是什么......对象是从函数派生的吗? 我不这么认为,因为:
>new Function() instanceof Object
true
>new Object() instanceof Function
false
所以不......
答案 0 :(得分:2)
看起来你的类型,功能和对象很混乱。
简答:
在Javascript函数中是对象。对象不是函数,但存在创建和/或返回对象的函数。
示例的详细答案:
你是正确的,功能是对象。 Object
是一个函数,因此Function
正如下面的控制台输出中所示。
但是当你说Object
是一个函数时,你实际上是在讨论Object()
函数,而不是类型object
。
// Object is a function
> Object
function Object() { [native code] }
// Function is a function
> Function
function Function() { [native code] }
// The type of Object is function
> typeof(Object)
"function"
// The type of the result of invoking the Object() function (AKA constructor, since using "new" keyword) is a new object
> typeof(new Object())
"object"
> new Object() instanceof Object
true
> new Function() instanceof Function
true
// note the difference
> new Object() instanceof Function
false
> new Function() instanceof Object
true
在您的示例中,在某些情况下,您实际上是在调用函数并查看函数的结果,而不是函数本身。例如,typeof(String) === "function"
但typeof(new String()) === "object"
(在这种情况下为" String"对象)。
当您使用new
关键字调用这些函数时,您获得了一个新对象,其类是您调用的函数的名称。 new Function() instanceof Object === true
的原因Object
是以这种方式构造的任何对象的基类。 Object
是基类的名称,实例的类型是"object"
(即,从类创建的对象,如来自cookie切割器的cookie)。