我在SO上找到了一些有趣的例子,其中包括指向这篇文章的链接。
文章中提到:
也就是说:函数本身就是它自己的构造函数!
这是因为:
请注意,与
从 Mozilla 开发者网络得知,原型和构造函数都可以很容易地被覆盖。而且,由于
Function.__proto__
指向Function.prototype
。这导致:
Function.constructor === Function
也就是说:函数本身就是它自己的构造函数!
Object instanceof Object == true.
这是因为:
Object.__proto__.__proto__.constructor == Object
请注意,与
Object instanceof Object
不同,Foo instanceof Foo == false
。这是因为:Foo
不存在于自己的原型链构造函数中。从 Mozilla 开发者网络得知,原型和构造函数都可以很容易地被覆盖。而且,由于
instanceof
只检查原型链中的 constructor.prototype
,我不明白为什么我的代码仍然返回 false
。function Foo() { } ;
Foo.prototype = Foo
Foo.constructor = Foo
Foo instanceof Foo // still false
关于原型,还有一些小问题。我理解的是,原型本身是一个独立的辅助对象?而这个对象就像是指向另一个对象(通常是Object
)的指针。
__proto__
,但JS虚拟机显示了对象循环的错误。 - Johnny_D__proto__
链永远不可能是循环的。如果您在对象中查找属性(例如obj.value
),但该属性不存在,则会在对象的__proto__
中查找该属性。如果该属性也不存在,则会查找__proto__.__proto__
,直到找到该属性或__proto__
为 null。对于循环原型链,这将导致无限递归。 - BartFunction
对象的情况下,它会以某种方式处理。 - Johnny_D