什么是原型链?

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

所有对象都有__proto__的属性

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

例如 定义一个对象:

了解JS原型链接

打印出来:

了解JS原型链接

执行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__ 就叫做原型链。

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

了解JS原型链接

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

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

了解JS原型链接

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

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

了解JS原型链接

了解JS原型链接

相关文章:

  • 2021-08-18
  • 2021-10-29
  • 2021-05-09
  • 2021-11-06
  • 2021-05-27
  • 2021-04-05
  • 2021-12-26
猜你喜欢
  • 2021-12-05
  • 2021-09-15
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案