概念
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 === '小芳‘? 主要经过了一下步骤
- 在a自身上找name属性,没有进入2
- 通过a.__proto__(也就是Array.prototype)找name,没有进入3
- 通过a.__proto__.__proto__(Object.prototype)找name, 找到了,返回小芳
我理解的原型链就是通过__proto__和prototype连接起来路线, __proto__是线,prototype是节点
var Person = new Function()
var person = new Person()