_proto_
:
所有构造器/函数的proto都指向Function.prototype,它是一个空函数(Empty function)
Number.__proto__ === Function.prototype // true
Boolean.__proto__ === Function.prototype // true
String.__proto__ === Function.prototype // true
Object.__proto__ === Function.prototype // true
Function.__proto__ === Function.prototype // true
Array.__proto__ === Function.prototype // true
RegExp.__proto__ === Function.prototype // true
Error.__proto__ === Function.prototype // true
Date.__proto__ === Function.prototype // true
Function本身就是函数,Function.proto是标准的内置对象Function.prototype。
console.log(typeof Function.prototype) // function
Function.prototype.proto是标准的内置对象Object.prototype。
console.log(Function.prototype.__proto__ === Object.prototype) // true
Object.prototype是原型链的顶端,所有对象从它继承了包括toString等等方法和属性。
Object.prototype.__proto__ === null // true
image
对象的
__proto__
指向自己构造函数的prototype。obj.__proto__.__proto__...
的原型链由此产生,包括我们的操作符instanceof
正是通过探测
obj.__proto__.__proto__... === Constructor.prototype
来验证obj是否是Constructor的实例
prototype:
只有函数才有prototype属性.
image当你创建函数时,JS会为这个函数自动添加prototype属性,值是空对象。
Function.prototype和Function.proto都指向Function.prototype,这就是鸡和蛋的问题怎么出现的。
Object.prototype.proto === null,说明原型链到Object.prototype终止。
Object本身是构造函数,继承了Function.prototype;Function也是对象,继承了Object.prototype。这里就有一个鸡和蛋的问题:
Object instanceof Function // true
Function instanceof Object // true
参考:
注意一点,this这个值在一个继承机制中(原型链与),仍然是指向它原本属于的对象,而不是从原型链上找到它时,它所属于的对象。
网友评论