一、原型链是什么 :
1. 每一个实例对象都有自己的原型。而原型也是对象,那它也有自己的原型。以此类推,就会形成一条链式结构,称之为原型链
2. 其中具有意思的是 proto (隐式原型) 和 prototype(显式原型),这两个名词可谓是原型链中的彼岸花,爱恨情仇都由你。
二、proto 和 prototype 的区别
三、Array的原型链
const arr = new Array(10, 20, 30);
console.log(arr);
//查看arr的原型
console.log(arr.__proto__.constructor) //Array
console.log(arr.__proto__ === Array.prototype) //true
//查看arr的原型的原型
console.log(arr.__proto__.__proto__.constructor) //Object
console.log(arr.__proto__.__proto__ === Object.prototype) //true
四、Date的原型链
const date1 = new Date()
//细节:日期对象直接console.log会转成string,查看对象需要使用console.dir打印
console.dir(date1)
console.log(date1.__proto__ === Date.prototype) //true
console.log(date1.__proto__.__proto__.constructor) //Object
console.log(date1.__proto__.__proto__ === Object.prototype) //true
五、String对象原型链
const str = new String('123')
console.log(str)
console.log(str.__proto__ === String.prototype) //true
console.log(str.__proto__.__proto__.constructor) //Object
console.log(str.__proto__.__proto__ === Object.prototype) //true
六、总结
1. 构造函数、原型对象、实例对象 可以作为一家三口来理解。
- 构造函数是爸爸,原型对象是妈妈,实例对象是儿子
- 当爸爸与妈妈擦出爱情的花火,才会有儿子
2. 原型链作用(面试题) : 继承
- 把父元素当作子元素构造函数的原型
- 说人话:儿子继承父亲的所有财产
3. 对象访问原型链规则 : 就近原则
- 对象优先访问自己的属性,自己没有才会访问原型,原型也没有 就访问原型的原型,以此类推,直到原型链终点(null),如果还没有 属性则获取undefined, 方法则报错 xxx is not a function