在JavaScript中:如果Object是一个函数,那么如果一个函数是一个对象的实例,它怎么可能

时间:2014-10-28 01:28:30

标签: javascript function object

换句话说,第一个是什么?一只鸡蛋还是一只母鸡?自从我读到这篇文章后,我无法理解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

所以不......

1 个答案:

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