先下结论:
每个实例对象上的__proto__
,指向这个构造函数的构造器,然后这个构造函数的构造器prototype
上有个__proto__
,它指向的是Object
上的prototype
,Object
的prototype
上面个__proto__
属性指向为null
,这样的一层层关系就形成的原型链
prototype 是什么
prototype
叫原型
也叫原型对象
是函数上的一个属性
js
function p() { }
console.dir(p)
它是函数上的一个属性并且是个对象类型的属性
js
function Person(name) {
this.name = name
}
const p1 = new Person()
console.log(p1.prototype)
实例对象上没有这个属性
proto 是什么
__proto__
叫隐式原型
是对象上的属性
js
function Person(name) {
this.name = name
}
const p1 = new Person()
console.log(p1.__proto__)
js
function p() { }
console.dir(p)
为什么函数上也有这属性,__proto__
不是对象上的属性吗?答:在JavaScript中,函数也是对象
验证原型链关系
js
function Person(name) {
this.name = name
}
const p1 = new Person()
console.log('p1.__proto__ === Person.prototype', p1.__proto__ === Person.prototype) // true
console.log('Person.prototype.__proto__ === Object.prototype', Person.prototype.__proto__ === Object.prototype) // true
console.log('Object.prototype.__proto__', Object.prototype.__proto__) // null