我理解的原型链

93 阅读1分钟

概念

1. 所有的函数、对象都有属性__proto__

2. 只有函数才有属性 prototype,称为原型对象

3. __proto__指向父亲的prototype【重要】

var A = new Function()
var a = new A()

a.__proto__ === A.prototype // 对应3
a.prototype === undefined // 对应2

A.prototype.__proto__ === Object.prototype // 对应3,A.prototye是一个对象,父亲是Object
A.__proto__ === Function.prototype // 对应3, A是函数,父亲是Function

Object.prototype.__proto__ === null // 特殊点1,对象的起点
Object.__proto__ === Function.prototype // 对应3, Object是个函数

Function.prototype.__proto__ === Object.prototype // 对应3
Function.__proto__ === Function.prototype //特殊点2

看一下代码

Object.prototype.name = '小芳'
var a = new Array()
console.log(a.name) // 小芳

为什么a.name === '小芳‘? 主要经过了一下步骤

  1. 在a自身上找name属性,没有进入2
  2. 通过a.__proto__(也就是Array.prototype)找name,没有进入3
  3. 通过a.__proto__.__proto__(Object.prototype)找name, 找到了,返回小芳

我理解的原型链就是通过__proto__和prototype连接起来路线, __proto__是线,prototype是节点

var Person = new Function()
var person = new Person()