引言
在看图之前希望大家明白几点
prototype
:函数都有一个prototype
属性,这个属性指向函数原型,原型是一个普通对象
例:Function.prototype=== Function的原型
constructor
:函数原型中有一个constructor
属性,它指向构造函数本身__proto__
:所有对象都有一个__proto__
属性,被称为隐式原型
注:就本篇而言可以把对象分为:函数对象(构造函数)、普通对象,对函数对象而言prototype、__proto__
属性都有,但是普通对象只有__proto__
属性
来个例子
function Foo(){}
Foo.prototype.say = function (){}
const foo1 = new Foo();
const foo2 = new Foo();
console.log(foo1.say === foo2.say) //true
console.log(Foo.prototype.constructor) // function Foo () {}
console.log(Foo.prototype === Function.prototype) // false
console.log(Foo.__proto__ === Function.prototype) //true
console.log(foo1.__proto__ === foo2.__proto__) // true
console.log(foo1.__proto__ === Foo.__proto__) // false
console.log(foo1.__proto__ === Foo.prototype) // true
console.log(Function.__proto__ === Object.__proto__) //true
console.log(Function.__proto__ === Object.prototype.__proto___) // false
console.log(Function.__proto__ === Object.prototype) //false
console.log(Function.prototype.__proto__ === Object.prototype.__proto__)//false
console.log(Function.prototype.__proto__ === Object.prototype) //true