JavaScript的原型与原型链理解

简单描述了原型与原型链的理解,欢迎学习讨论。

构造函数

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

猜你喜欢

转载自blog.csdn.net/weixin_44000173/article/details/124461709