prototype和__proto__的区别和联系
重点:
- 1、每一个对象都有一个__proto__属性,包括函数也是对象,也有__proto__属性。
- 2、每一个构造函数都有一个prototype方法。
- 3、每个对象的__proto__属性都指向自身构造函数的prototype。(obj.__proto__等于function.prototype)
1、概念
proto
- 对象特有
- 该属性指向对象本身的构造函数的prototype
- 所以对象可以从prototype中继承属性和方法
prototype
- 该属性是函数特有
- 该属性可以用于存储需要被共享的属性和方法
constructor
- 函数特有,定义在prototype里面
- 使用new创建实例的时候,实例会继承prototype中的属性和方法
2、既是函数也是对象
Object:既是对象,也是构造函数
- 作为对象:
Object.__proto__ === Function.prototype - 作为函数:
Object.prototype是原型链的顶端,Object.prototype.__proto__ === null
Function:既是对象,也是构造函数
- 作为对象:
Function.__proto__ === Function.prototype - 作为函数:
Function.prototype的函数和属性可以被实例共享,Function.prototype.__proto__ === Function.