JavaScript Object instanceof函数和函数instanceof Object

时间:2014-12-24 07:17:46

标签: javascript function object instanceof

请原谅我的无聊,但我真的不明白以下几点:

Function instanceof Object

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

但为什么

Object instanceof Function

还返回true

2 个答案:

答案 0 :(得分:4)

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的非常特殊的值是{{1}的实例}。 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 的值是一个函数,反过来又是对象。

答案 1 :(得分:0)

所有构建的构造函数(如Object,Array,String等)都是函数。所以Object instanceof Function必须成立。

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

然后

obj instanceof Function

...它将是假的,因为你现在拥有的不是函数或构造函数而是对象。