关键字
__proto__
隐式原型
prototype
显式原型
constructor
构造器
简述
function Parent() {
}
p = new Parent()
- 实例(对象)有
__proto__
(隐式原型) , 实例(对象)没有prototype
。
__proto__
指向构造函数的原型对象
console.log(p.__proto__)
p.__proto__ === Parent.prototype
p.__proto__.__proto__ === Parent.prototype.__proto__ === Object.prototype
- 构造函数有
prototype
(显式原型),同时prototype
又是对象,那么prototype
即满足上面一条,除了拥有__proto__
外,还含有constructor
(构造器)
console.log(Parent.prototype)
console.log(Parent.prototype.__proto__)
console.log(Parent.prototype.constructor)
- 构造函数的
prototype
的constructor
就是指向构造函数本身,即此例子中
Parent.prototype.constructor = Parent
Parent.prototype.constructor = Parent
// ***** 实例本身并无constructor,不过会借助原型链向上查找 *****
p.constructor === Parent.prototype.constructor
p.constructor === Parent
https://www.jianshu.com/p/0bf7366845d7
https://www.jianshu.com/p/bf5deff20c99
https://blog.csdn.net/hugo233/article/details/109513019
还有一个重要的点
-
(Object)对象
的__proto__
会指向(Function)构造函数
的prototype
,这从上面就可以就可以得知。
console.log(Object.__proto__ === Function.prototype) // true
-
(Function)构造函数
的__proto__
会指向(Function)构造函数
的prototype
;
(Function)构造函数
本身也是对象,最终也是指向Object.prototype
console.log(Function.__proto__ === Function.prototype)
console.log(Function.prototype.__proto__ === Object.prototype)
网友评论