JS中prototype和__proto__ 的区别和关系?

prototype属性和到底有什么区别和联系呢?下面就让我们一起来看看吧!

首先,我们得明确prototype属性是只有构造函数才特有的属性,而___proto____是对象具有的属性。

也就是说,每个构造函数中都有一个默认的属性,叫做prototype。prototype属性保存着一个对象,这个对象我们称之为“原型对象”,原型对象也有一个属性,叫做constructor,这个属性包含了一个指针,指回原构造函数。另外,通过构造函数创建出来的对象我们称之为“实例对象”,而___proto____就是每个实例对象的默认属性,___proto____指向创建它的那个构造函数的原型对象。

构造函数三角恋关系.png

两者之间的联系我们就通过下面例子来分析

        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属性指向该构造函数。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容