构造函数
function Person() {}
var person = new Person()
Person为构造函数
person为实例对象
每个构造函数都会有一个prototype
属性,例如:
Person.prototype.name = 'lh'
var p1 = new Person()
console.log(p1.name) // 打印lh
那么构造函数的prototype
属性指向哪里呢?
答案是指向了实例对象的原型
原型
什么是原型呢?Person.prototype就是一个原型,你也可以理解为,js在创建对象的时候(除null外)会关联另外一个对象,就是原型
我们如何表示实例和实例原型之间的关联呢?
__proto__属性
每一个实例对象都有一个__proto__属性,这个属性指向了它的实例原型
function Person() {
}
var person = new Person()
//这里打印返回为true
console.log(person.__proto__ === Person.prototype)
构造函数有prototype属性指向实例原型,实例原型也有一个constructor属性指向构造函数
function Person() {
}
var person = new Person()
//打印为true
console.log(Person.prototype.constructor === Person)
原型的原型
根据上图我们可以想想,Person.prototype这个原型对象是如何创建出来的呢?
既然是对象,那它就可以从Object构造函数创建出来
Person.prototype这个原型也有个__proto__属性,这个属性指向了Object.prototype
验证一下
function Person() {
}
var person = new Person()
// 打印结果是true
console.log(Person.prototype.__proto__ === Object.prototype)
Object构造函数和Object原型关系如上图所示
Object.prototype原型的属性__proto__指向了null
以上的关系图就构成了 原型链
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。