console.log(Function instanceof Object);//true
console.log(Object instanceof Function);//true
此代码取自文章:https://github.com/stevekwan/experiments/blob/master/javascript/object-vs-function.html
我想我理解什么是原型继承以及Js对象模型是如何工作的,但是这个循环链接在两个基本的hmm ..可能是构造函数(它是作为对象的函数......并且所有对象都是Object构造函数的实例... )功能和对象只是让我大吃一惊。
在面向类的语言中,我可以想象有一些基本的类Object,我所创建的每个类都会自动从它继承。
对我来说有时间一致性 - 类对象首先出现,然后我写的所有其他内容出现在第二个等等。我真的不明白两个构造函数是如何神奇地同时出现并且是彼此的实例。
答案 0 :(得分:5)
请注意,Function
和Object
都是引用函数的全局符号。因此,这两个函数都是Object
和Function
的实例,因为它们都继承自两个原型。
如果你这样做,那就不那么容易混淆了:
var a = Function, b = Object;
console.log(a instanceof Object);
console.log(b instanceof Object);
console.log(a instanceof Function);
console.log(b instanceof Function);
这些函数具有与其他函数一样的属性:
var c = function() {};
console.log(c instanceof Object);
console.log(c instanceof Function);
在instanceof
运算符的左侧,重要的是所涉及对象的性质。
答案 1 :(得分:3)
没有循环。 [[Prototype]]链中不能有循环。
Function instanceof Object
表示Function
的[[原型]]链包含Object.prototype
。
Object instanceof Function
表示Object
的[[原型]]链包含Function.prototype
。
这不是循环的,因为Object
不在Object.prototype
的[[原型]]链中,而Function
不在Function.prototype
的[[原型]]链中
[[Prototype]]链是
╭╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮
╎ Function ━┓ /* Function instanceof Object */ ╎
╰╌╌╌╌╌╌╌╌╌╌╌┃╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ ╎
╭╌╌╌╌╌╌╌╌╌╌╌┃╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ ╎ ╎
╎ ┣━━❯ Function.prototype ━━━━━❯ Object.prototype ━━━❯ null
╎ ┃ ╎ ╰╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯
╎ ┃ ╰╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮
╎ Object ━━━┛ /* Object instanceof Function */ ╎
╰╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯
答案 2 :(得分:1)