什么是原型链?1分钟看懂原型链
2023-04-26 本文已影响0人
万水千山林
说原型链之前先思考一个问题。
var fun = function (){}
fun.toString() // 'function (){}'
fun 上这个toString方法哪里来的
var arr = [];
arr.length // 0
arr 上length 方法又是哪里来的
所有函数上都有一个属性prototype(原型对象)
所有对象上都有一个私有属性__ proto__
对象的__ proto__指向其构造函数的prototype
var obj = new Object()
obj.__proto__ === Object.prototype // true
prototype是原型对象
image.png
可以看到obj就是一个没有任何属性,但是执行obj.toString()却没有报错
obj.toString()
// '[object Object]'
原因是obj的构造函数Object()里面有这些方法,当在obj里面找不到toString()时,js就会默认在obj.__ proto__里面寻找,找到就拿出来用,就这样一层接一层的寻找,直到尽头
尽头是null
image.png
这就是原型链