【问题标题】:JavaScript Object instanceof Function and Function instanceof ObjectJavaScript Object instanceof Function 和 Function instanceof Object
【发布时间】:2015-02-22 08:16:49
【问题描述】:

对不起,我不太明白以下内容:

Function instanceof Object

它返回true。好的。我明白...所以Function 实际上是一个对象。相反,它是任何函数的构造函数。因此,当您创建一个函数时,您会创建一个对象,该对象有一个 prototype,它本身就是一个对象,而 prototype 包含函数的构造函数。它继承自Object,因为任何对象都是通过Object 构造函数创建的。

但是为什么

Object instanceof Function

也返回true

【问题讨论】:

  • Object 是对象的构造函数,它是一个函数。
  • 这个answer实际上解释了为什么会发生这种情况。

标签: javascript function object instanceof


【解决方案1】:
Object instanceof Function

它返回 true 因为Object Function 的一个实例。它是对象构造函数。称之为

Object({})

看起来像一个函数,不是吗,果然是一个。有一个call 方法和一切:

Object.call(0, {})

同样,

Number instanceof Function // true
String instanceof Function // true

混淆可能源于认为Object instanceof Function 意味着对象是函数的实例的自然倾向。不,对象不是函数的实例,Object instanceof Function 并不意味着,它意味着一个名为Object 的非常特殊的值Function 的一个实例。 Number instanceof Function 并不表示数字是函数的实例,而是表示名为 Number 的特定对象(数字类型的构造函数)是函数的实例,因为它是:

Number(1)

可能会更清楚地注意到

String instanceof String // false
Date   instanceof Date   // false

因为String 构造函数不是字符串——它是一个函数。

然而,

Function instanceof Function // true

您可能认为这很明显,但这并不是因为“函数就是函数”——而是因为 Function 对象是构造函数(用于函数)。

同理

Object instanceof Object // true

也可能看起来很明显,但它不是因为“对象是对象”,而是因为名为@9​​87654341@ 的值是一个函数,而该函数又是对象。

【讨论】:

  • 所以..当你创建一个函数时,你实际上是创建了一个对象函数。并且那个对象函数有一个原型。那个原型是一个对象。它包含构造函数。以及您要初始化的所有数据。但现在我明白 Function 函数是个怪人。因为它创建了自己的原型(就像任何其他函数一样,所以它是有意义的),但它继承自该原型。以及任何其他函数,包括大函数:Object、Array、Number、String 从这个继承。另一方面,这些原型是它们从 Object 继承的对象。正确的?谢谢。
  • 这就是为什么 Object 拥有函数的所有方法。这就是为什么任何原型都拥有对象所拥有的一切。那么可以肯定地说所有构造函数都可以在任何函数对象的原型属性中找到吗?并且所有的构造函数都指向各自的函数对象。
  • 查看answer 了解对 OP 问题的解释。
【解决方案2】:

对象、数组、字符串等所有内置构造函数都是函数。所以 Object instanceof Function 必须成立。

现在如果你尝试 obj = new Object();

然后

obj 实例函数

...这将是错误的,因为您现在拥有的不是函数或构造函数,而是对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 2011-09-16
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多