理论大家天天都在看,就不讲了哈(脑壳都绕晕了),直接上例子开干
根据图和后面的代码和注释 应该不能理解
js中万物皆对象,对象都有__proto__这个属性
例子1 大家先看看,晓得个大概。然后看例子2 然后在回过头来重头理一下。
根据上图可以推出这几个等式
let str =''
str.__proto__===String.prototype //字符串实例.__proto__===字符串构造函数.prototyope true
let intt=666
intt.__proto__===Number.prototype //数字实例.__proto__===数字构造函数.prototyope true
let obj={}
obj.__proto__===Object.prototype //对象实例.__proto__===对象构造函数.prototyope true
let arr=[]
arr.__proto__===Array.prototype //数组实例.__proto__===数组构造函数.prototyope true
let fn=function(){}
fn.__proto__===Funtion.prototype //函数实例.__proto__===函数构造函数.prototyope true
因为对象的源头是Object,所以可以推出这几个等式
String.prototyope.__proto__===Object.prototype //所以String构造函数.prototype.__proto__===对象构造函数.prototype true
Number.prototyope.__proto__===Object.prototype //所以Number构造函数.prototype.__proto__===对象构造函数.prototype true
Object.prototyope.__proto__===Object.prototype //所以Object构造函数.prototype.__proto__===对象构造函数.prototype true
Array.prototyope.__proto__ ===Object.prototype //所以 Array构造函数.prototype.__proto__===对象构造函数.prototype true
Funtion.prototyope.__proto__===Object.prototype //所以Funtion构造函数.prototype.__proto__===对象构造函数.prototype true
复制代码
例子2 建一个构造函数 new一个实例
let A = function() {} // 对应图中构造函数
let a = new A() // 对应图中实例
根据图中等关系我们不难得出这几个等式:
//----------------------------------形成了一条以__proto__为链条的原型链-------------
a.__proto__===A.prototype //实例.__proto__===构造函数.prototype true
A.__proto__ === Function.prototype // 因为 A即是构造函数也是普通的函数,万物皆对象,对象都有__proto__
// 所以 函数实例.__proto__===函数构造函数.prototyope true
Function.prototype.__proto__ === Object.prototype //因为对象的源头是Object。所以 true
//所以构造函数.prototype.__proto__===对象构造函数.prototype true
//------------------------------------------------------------------------------------
同时下面这几个等式也是成立的
A.prototype.__proto__ === Object.prototype //因为对象的源头是Object。
//所以A构造函数.prototype.__proto__===对象构造函数.prototype
A.prototype.constructor===A //构造函数.prototype.constructor===构造函数 true
复制代码
转载于:https://juejin.im/post/5c51649fe51d455047338ad4