【问题标题】:In JavaScript: If Object is a function then how can it be if a function is an instance of an object [duplicate]在 JavaScript 中:如果 Object 是一个函数,那么如果一个函数是一个对象的实例呢?
【发布时间】:2014-12-23 08:05:09
【问题描述】:

换句话说,什么是第一?鸡蛋还是母鸡?读到以下内容后,我无法理解 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

所以不是……

【问题讨论】:

  • Object一个函数也是一个对象,new创建一个对象,它可以是一个函数。
  • object 是一个类型; Object是一个函数和一个对象(所有函数都是对象); Object 是一个类,它可以构造 object 类型的对象,这些对象是 Object 类的实例。所有其他类都继承自基类Object。所以new Function() 的实例是函数,它们是作为基类为ObjectFunction 类的实例的对象。所以一个函数(或一个类型为function的对象)既是Function又是Object。像泥一样清澈,对吧?

标签: javascript function object


【解决方案1】:

您似乎对类型、函数和对象感到困惑。

简答:

在 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"(在本例中为“字符串”对象)。

当您使用 new 关键字调用这些函数时,您会得到一个新对象,其类是您调用的函数的名称。 new Function() instanceof Object === true 的原因是 Object 是任何以这种方式构造的对象的基类。 Object 是基类的名称,实例的类型是"object"(即从该类创建的对象,如千篇一律的饼干)。

【讨论】:

    猜你喜欢
    • 2015-05-07
    • 1970-01-01
    • 2011-04-26
    • 2020-02-01
    • 2015-07-15
    • 2023-04-06
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    相关资源
    最近更新 更多