prototype属性和到底有什么区别和联系呢?下面就让我们一起来看看吧!
首先,我们得明确prototype属性是只有构造函数才特有的属性,而___proto____是对象具有的属性。
也就是说,每个构造函数中都有一个默认的属性,叫做prototype。prototype属性保存着一个对象,这个对象我们称之为“原型对象”,原型对象也有一个属性,叫做constructor,这个属性包含了一个指针,指回原构造函数。另外,通过构造函数创建出来的对象我们称之为“实例对象”,而___proto____就是每个实例对象的默认属性,___proto____指向创建它的那个构造函数的原型对象。
两者之间的联系我们就通过下面例子来分析
function Factory(name, water) {
this.name = name
this.water = water
}
//原型对象
Factory.prototype.juicing = function () {
console.log(this.name + '汁')
}
// Factory.prototype.price = 2.5
//构造函数可以创建对象出来,把构造函数创建出来的对象称之为实例化对象
//实例化对象
let apple = new Factory('苹果', 500)
//查看下构造函数的原型对象 prototype ---> {}
console.log(Factory.prototype) //Object
//验证下这个原型对象属不属于构造函数 constructor属性,可以证明
console.log(Factory.prototype.constructor) //ƒ Factory( )
//apple.juicing()
//查看实例化对象创建它的构造函数的原型对象是不是和咱们现在使用的构造函 数是一样的关系
console.log(apple.__proto__) //Object
总结
1.构造函数的prototype属性指向该构造函数的原型对象。
2.实例化对象的___proto____属性也指向该构造函数的原型对象。
3.原型对象的constructor属性指向该构造函数。