简单描述了原型与原型链的理解,欢迎学习讨论。
构造函数
function A(){}
原型 构造函数都有prototype原型属性
A.prototype.name = 'wjx'
原型的 constructor属性
console.log(A.prototype.constructor)
实例对象
let B = new A()
实例对象都有__proto__属性,这个属性指向构造函数的原型
console.log(B.__proto__)
几者关系
// 原型与实例对象关系
console.log(A.prototype)//{ name: 'wjx' }
console.log(B.__proto__); //{ name: 'wjx' }
console.log(B.__proto__ === A.prototype);//true
// 原型与构造函数关系
console.log(A.prototype.constructor===A)//true 原型的constructor又指向构造函数
//=============================================================//
// 实例对象与原型的关系
B.name ='wjx123'
console.log(B.name);//wjx123 这里访问到了自己本身的属性
console.log(B.__proto__)//{ name: 'wjx' },他的__proto__指向原型A.prototype.name = 'wjx'
delete B.name //这里在闪吊后,自己的属性就没有了,会访问__proto__
console.log(B.name)//wjx __proto__指向构造函数A的指向原型,
总结:
实例对象先访问自己的属性,如果没有就访问__proto__,
__proto__指向原型,在原型里面找, 如果找不到,就在原型的原型里找,原型的原型是啥呢?对象?。 原型的对象是由构造函数Object()生成的console.log(Object.prototype.__proto__ === null) // true
所以
Object.prototype.proto
的值为 null 跟 Object.prototype 没有原型,其实表达了一个意思。
// 所以查找属性的时候查到 Object.prototype 就可以停止查找了。~~~~~~~~~~~~~~~~这个就是原型链了。。。。。。。。。个人学习理解。如有不对,请大佬纠正。
学习交流扣群儿732278669