? ? ? ? 一般,构造函数的显示原型和其实例对象的隐式原型是指向同一个地方的,这个地方叫做原型对象
//构造函数
function Person(){}
//p1实例对象
let p1 = new Person()
console.log(Person.prototype === p1.__proto__) // true
??在js中有一句话叫:万物皆对象!(那也可以理解成在js中万物都包含__proto__属性吧)
let num = 1
console.log(num.__proto__ === Number.prototype) //true
let str = 'abc'
console.log(str.__proto__ === String.prototype) //true
let n = true
console.log(n.__proto__ === Boolean.prototype) //true
let obj = {}
console.log(obj.__proto__ === Object.prototype) //true
function fn(){}
console.log(fn.__proto__ === Function.prototype) //true
console.log(Object.__proto__ === Function.prototype) //true
console.log(Number.__proto__ === Function.prototype) // true
console.log(Function.__proto__ === Function.prototype) //true
?可以看出:
原型:原型分为显示原型和隐式原型,每个对象都有一个隐式原型,它指向自己的构造函数的显示原型
原型链:就是多个实例对象的__proto__组成的集合?