prototype 显示原型
每个函数都一个 prototype,指向它的原型对象。
__proto__ 隐式原型
此属性存在于其实例上,__proto__ 指向构造函数的原型对象。
(1)对于普通函数
也有 __proto__ ,指向的 Function.prototype,实际上还是用 Function 构造函数,来创建函数的实例
const a = function (name){
console.log(`${name}`)
}
等同于
const a =new Function('name','console.log(`${name}`)')
a.__proto__ == Function.prototype
(2) 对于构造函数
构造函数同样说到底还是函数,其实 还是Function 构造函数的 的实例
比如:
function Person(){
}
function Object (){
}
Person.__proto__== Object.__proto__==Function.prototype // true
Person 中的prototype 指向 Person.prototype (原型对象)
Object中的prototype 指向 Object.prototype (原型对象)
原型对象中 还有一个constructor 属性 ,它指向 构造函数本身
比如:
Person.prototype.constructor == Person
Object.prototype.constructor == Object
(3)对于构造函数的 实例对象
: 实例对象的原型 指向 构造函数的原型对象
比如:
const a1 =new Person()
const b1 = new Object()
a1.__proto__ == Person.prototype //true
b1.__proto__ == Object.prototype //true
(4)原型对象
原型对象 ,本质说到底 还是对象, 他也是通过 new Object () 来创建的
所以呢? 原型对象实则还是 Object的实例,实例则有__proto__ ,指向Object的原型对象
比如:
function Person (){
}
Person.prototype.__proto__ == Object.prototype //true
(5)原型链
什么是原型链? 简单点来讲 ,就是__proto__ 的路径,即为原型链
比如:
function Person (){}
const a = new Person()
a.__proto__ 指向 Person.prototype
Person.prototype.__proto__ 指向 Object.prototype
Object.prototype.__proto__ 指向null
即
a.__proto__ ==>Person.prototype
Person.prototype.__proto__ ==>Object.prototype
终点 即为 null
Object.prototype__proto__===>null