原型链污染

1. 原型链介绍

下面主要来自于P神的介绍:

  1. prototype是一个类的属性,所有类对象在实例化的时候将会拥有prototype中的属性和方法
  2. 一个对象的__proto__属性,指向这个对象所在的类的prototype属性
  3. 每个构造函数(constructor)都有一个原型对象(prototype)
  4. 对象的__proto__属性,指向类的原型对象prototype
  5. JavaScript使用prototype链实现继承机制
foo.__proto__ == Foo.prototype

1.1. 原型链的继承

function Father() {
    this.first_name = 'Donald'
    this.last_name = 'Trump'
}

function Son() {
    this.first_name = 'Melania'
}

Son.prototype = new Father()

let son = new Son()
console.log(`Name: ${son.first_name} ${son.last_name}`)

继承逻辑:

  1. 在对象son中寻找last_name
  2. 如果找不到,则在son.__proto__中寻找last_name
  3. 如果仍然找不到,则继续在son.__proto__.__proto__中寻找last_name
  4. 依次寻找,直到找到null结束。比如,Object.prototype__proto__就是null

2. References