Object instanceof Object
true
Object instanceof Function
true
Function instanceof Object
true
Function instanceof Function
true
所以如果Function是一个Object而Object是一个函数怎么来
Function === Object
和Function == Object
是假的?
我明白检查对象的实例与比较不一样。所以这里的问题是如果两个对象(实际上是类型)是彼此的实例的情况下的模糊性,那么类型不应该相同吗?
注意:Object不是Number或Array的实例,只是Function的一个实例。
答案 0 :(得分:17)
来自JavaScript Prototypal Inheritance:
在JavaScript中,所有东西都继承自Object。我们可以说 Object是超级构造函数的超类,或更好的 每个变量,并且一切都是Object的实例。物体 构造函数是一个Function,但Function是一个Objectof的实例。 这意味着这些断言总是正确的:
(Object instanceof Function) === (Function instanceof Object)
上面的例子是正确的,因为Object是一个构造函数,JavaScript中的构造函数总是一个Function。在同一个 时间,每个功能都有自己的原型,总是原型 从Object.prototype开始继承。功能 构造函数,是一个函数本身,而函数原型是一个 函数(){};
(Function.prototype instanceof Object) === (function(){} instanceof Object)
答案 1 :(得分:5)
JavaScript中的所有内容都是Object
,因为JavaScript是一种面向对象的语言。 Function
是Object
的一个实例,因为所有内容都是Object
的实例。很简单。但是,初始化其他对象(构造函数)的对象在JavaScript中也是Function
,因此Object
也可以是Function
。
想一想:
var obj = new Object();
在这种情况下, Object
用作Function
,不是吗?因此,虽然理论上Object
应该是语言中最低级别的对象,但JavaScript不能在没有Function
s(双关语!)的情况下运行,因此您需要两者都处于同一级别。 Object
需要是Function
的实例,因为它是构造函数,需要创建更多自身实例。
function FooBar() {}
上面的FooBar
类是Object
和Function
的实例,因为它们都是。{相同的逻辑适用于内置的Object
和Function
对象;他们是两者的例子。
答案 2 :(得分:4)
我认为这更多是由于定义对象的独特方式。你没有在javascript中定义一个类型,你定义了一个构造函数。但是你也没有将构造函数定义为构造函数,它只是一个函数。
然后,您可以通过其构造函数的名称来引用类型....这只是一个函数。
function Tiger(){ //function, or object?
}
function Apple(){ //function, or object?
}
两个都可以成为对象,或者只是函数。只有您使用它们的方式才能确定。所以有点是有意义的,在较低的层次上,对象是函数,函数是对象,但仍然存在差异,对吧?
答案 3 :(得分:1)
Javascript中没有类这样的东西。函数调用instanceof
运算符。
Object
是“对象对象”的构造函数(是的,这是官方术语),Function
是“函数对象”的构造函数。
因此,当您调用Function instanceof Object
时,它会返回true
,因为Function
是一个函数,因此是一个对象等。这并不意味着类型是相同的,因为对象和函数有不同的原型:
Object.prototype
^
| inherits from
| instance
Function.prototype <------- Object, Function
答案 4 :(得分:0)
javascript:alert([ window.navigator.userAgent, Object ].join("\n\n") )
显示器
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423
Ubuntu/10.04 (lucid) Firefox/3.6.3
function Object() {
[native code]
}
答案 5 :(得分:0)
假设:
&lt; ----:指向(通过.__proto__
)
&lt; - :继承了(通过.
)
然后:
Function.prototype&lt; ---- {Object,Function}
对象&lt; ---- Function.prototype
Object.prototype&lt; - Object
console.log(Object.prototype.constructor === Object); // true!
Object.prototype
不链接到任何内容;它没有__proto__
属性。
答案 6 :(得分:-2)
instanceof运算符指示第一个参数是否属于给定类型。那就是说
A instanceof B
如果A是类型B的实例,则返回true。
另一方面,==和===运算符是比较运算符。他们比较了相等的价值。
例如,你可以说杰克instanceof男孩是真的,但你会说杰克==男孩?否。