请原谅我的无聊,但我真的不明白以下几点:
Function instanceof Object
返回true
。好。我理解......所以Function
实际上是一个对象。相反,它是任何函数的构造函数。因此,当您创建一个函数时,您创建的对象具有prototype
,该对象本身就是一个对象,而prototype
包含该函数的构造函数。它继承自Object
,因为任何对象都是通过Object
构造函数创建的。
但为什么
Object instanceof Function
还返回true
?
答案 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
...它将是假的,因为你现在拥有的不是函数或构造函数而是对象。