javaScript 深入学习(1)原型链

187 阅读1分钟

话不多说直接上代码

构造函数创建一个实例对象

function Person(){
}
Person.prototype.name = '张三'
let person1 = new Person()

1. 函数的protopy属性

重点:每个函数都有prototype属性,它是一个对象,指向了构造函数实例对象的原型

什么是原型?

js对象在创建的时候都会与另外一个对象与之关联,称为原型,每个对象都会从原型上继承属性。

console.log(Person.prototype) //构造函数实例对象的原型

2. 对象的__proto__属性

重点:每一个对象(null除外)都有一个__proto__属性指向它的原型

Person.prototype 与 person1的关系是什么呢?

console.log(Person.prototype === person1.__proto__)

3. 对象的constructor属性

重点:每个原型都有一个 constructor 属性指向关联的构造函数

既然实例对象和构造函数都可以指向原型,那么原型是否有属性指向构造函数呢?

console.log(Person.prototype.constructor === Person)

4.关于原型链

重点:当读取实例的属性时,如果找不到,就会查找与对象关联的原型中的属性,如果还查不到,就去找原型的原型,一直找到最顶层为止。


//1. 实例person1对象的__proto__属性 执向 Person构造函数的prototype对象
person1.__proto__ === Person.prototype 

//2. Person构造函数的原型对象的__proto__指向 Object构造函数的prototype对象
Person.prototype.__proto__ === Object.prototype

//3. Object构造函数的原型对象__proto__指向 null 
Object.prototype.__proto__ === null

console.log(person1.__proto__.__proto__.constructor.prototype.__proto__ === null)//true

console.log(Object.prototype.__proto__ === null) // true

参考大佬文章: javaScript深入之从原型到原型链