function Person(){}
let p1 = new Person()
let p2 = new Person()
let obj = {}
p1.__proto__ =Person.prototype
p2.__proto__ =Person.prototype
Person.__proto__=Function.prototype
Person.prototype=Person.prototype
Person.prototype.__proto__=Object.prototype
Person.prototype.constructor=Person
Function.__proto__ =Function.prototype
Function.prototype=Function.prototype
Function.Prototype.__proto__=Object.prototype
Function.constructor=Function
obj. __proto__ = Object.prototype
Object. __proto__=Function.prototype
Object.prototype=Object.prototype
Object.prototype.__proto__ =null
Object.constructor=Object
放一張圖
1566904-20190104144654692-1100182048.jpg
做一個總結,說的不對的希望指出
1.無論是構造函數還是實例對象都有proto,
2.實例對象的proto 指向該對象構造函數的原型即p1.proto =Person.prototype
3.構造函數的proto 都指向Function.prototype,Function自身也不例外
4.所有原型都有proto 和constructor
5.除了Object.prototype的proto為null,其他所有原型的proto都指向Object.prototype
6.原型的constructor指向原構造函數