了解JS原型链接

什么是原型链?

对象都有一个__proto__这个属性(我们一般都叫做隐式原型)

所有对象都有__proto__的属性

只有函数拥有prototype属性,我们叫做显示原型。原型对象: 拥有prototype的属性的对象都叫做原型对象,在函数定义时被创建。

例如 定义一个对象:

打印出来:

执行obj2.toString()却能打印出来东西。可是obj2只有一个name属性,并没有toString()属性,但是当我们去读取obj2.toString()的时候,却能读到,原来当我们读取obj2.toString()的属性时,JS 引擎会做这样的事情:

1.他先读取obj2的属性有没有toString,如果有就读取;如果没有他就去读取obj2.__proto__对象看看有没有toString的属性。

2. 如果有就读取,如果没有就读取obj2.__proto__.__proto__,有就读取,没有就继续obj2.__proto__.__proto__.__proto__

3.依次类推,直到,读取到toString属性或者.__proto__为null ,则结束。

上面的链子 obj2.__proto__.__proto__.__proto__ 就叫做原型链。

还有一个知识叫做:共享原型链,看下面的例子

这里 我们修改obj2的__proto__的toString()方法,返回当前的name,

然后打印 obj 和obj2的toString()都发生了变化。

我也测试了一下,定义数组和函数,只是修改obj2的__proto__也都会变化。

__proto__不是标准写法!!!! 会改变所有的引用类型的,不建议这么写。

猜你喜欢

转载自blog.csdn.net/qq_33505829/article/details/88526400