原型链

68 阅读1分钟

原型链作为继承的基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。

var arr=new Array(1,3,2)
console.log(arr.__proto__,arr.__proto__===Array.prototype)
console.log(arr.__proto__.__proto__,arr.__proto__.__proto__===Object.prototype)
console.log(arr.__proto__.__proto__.__proto__)

image.png 由上面代码可知,对象的内部是有许多层的,对象的原型是.__proto__即构造函数.prototype,构造函数的原型为构造函数.prototype.__proto__即构造函数的构造函数.prototype---一直到null结束

image.png

  • 通过实现原型链,本质上扩展了原型搜索机制,当以读取模式访问一个实例属性时,首先会在实例中搜索该属性。如果没有找到该属性,则会继续搜索实例的原型。在通过原型链实现继承的情况下,搜索过程就得以沿着原型链继续向上,一直到null结束。
  • 我们可以人为的设置对象或函数的原型,或者给对象或函数的原型添加属性
var son = {
    name: "jack",
    age: 18
  }
  var father = {
    name: "papa",
    age: 4,
    jineng: "cook"
  }
  son.__proto__ = father //让son的原型为father
  console.log(son.jineng) //因为son的原型为father,所以son可以访问father的技能
  son.__proto__.job = "teacher" //给原型上添加新属性job
  console.log(father.job)//father为son的原型,所以可以访问

image.png