__proto__
是 JavaScript 中对象的一个内部属性,它指向该对象的原型。JavaScript 中每个对象都有一个 __proto__
属性,通过它可以访问对象的原型。prototype
是函数对象特有的属性,每个函数都有一个 prototype
属性,它指向一个对象,这个对象就是该函数的原型(这个原型对象包含了实例共享的方法和属性)。? 当使用 new 关键字创建一个实例时,这个实例的 __proto__
就指向了构造函数的 prototype
,这样一来,实例就可以访问构造函数原型对象上定义的方法和属性。
? 简而言之,__proto__
是对象上的属性,而prototype
是函数对象上的属性。它们的关系在于:
? 1、对象实例的 proto 属性指向其构造函数的 prototype。
? 2、对象可以通过 proto 属性访问到原型链上的其他对象,包括 Object.prototype。
? 3、函数对象的 prototype 属性用于定义构造函数的原型对象,这个原型对象包含了实例共享的方法和属性
1.一个重要的内置关系:
VueComponent.prototype.__proto__ === Vue.prototype
(这个vue原型对象包含了实例共享的方法和属性。)2.为什么要有这个关系:让组件实例对象(vc)可以访问到 Vue实例的原型上的属性、方法。
//定义一个构造函数
/* function Demo(){
this.a = 1
this.b = 2
}
//创建一个Demo的实例对象
const d = new Demo()
console.log(Demo.prototype) //显示原型属性
console.log(d.__proto__) //隐式原型属性
console.log(Demo.prototype === d.__proto__) //这里返回的就是true
//程序员通过显示原型属性操作原型对象,追加一个x属性,值为99
Demo.prototype.x = 99