构造函数、原型对象、实例对象三者的区别

构造函数、原型对象、实例对象三者分别是什么?

构造函数:是用来创建对象的函数,通过new关键字来声明。

原型对象:每一个函数在创建的时候,系统都会给分配一个对象,这个对象就原型对象。

实例对象:构造函数中通过new关键字返回的对象就是实例对象。

通过一张图来介绍三者之间的关系

  

构造函数中存在一个prototype属性,这个属性指向它的原型对象;

原型对象中存在一个constructor属性,这个属性指向它的构造函数;

实例对象中存在一个__proto__属性,这个属性指向它的原型对象;

打个比方:三者就相当于一家三口的关系,构造函数相当于爸爸,原型对象相当于妈妈,实例对象相当于儿子,爸爸只能有一个妻子,妈妈只能有一个丈夫,所以它们是相互指向的,而儿子必须需要通过妈妈才能找到自己的亲爸爸(因为妈妈一定是亲的,爸爸就不一定咯),哈哈哈。通过这么一比喻是不是就更容易理解了呢!

通过代码来描述它们之间的关系

//实例对象通过原型对象找到构造函数
console.log(p1.__proto__.constructor)//Person
//实例对象通过属性指向原型对象,构造函数通过属性也指向原型对象
//如果返回值为true那就证明它们拥有同一个原型对象
console.log(p1.__proto__==Person.prototype)//true

new关键字的工作原理(四步)

new创建一个对象;

通过this指向这个对象;

通过this给这个对象赋值;

返回这个对象。

原型对象是为了解决什么问题?

原型对象是为了解决构造函数造成的内存浪费和变量污染的问题。

静态成员和实例成员

静态成员是函数对象的成员

实例成员是实例化对象的成员

    //  构造函数
    function Person(name, age) {
      this.name = name
      this.age = age
    }
    // 实例化对象
    let p1 = new Person('张三', 18)
    // 静态成员是函数对象的成员
    console.log(Person.sex = '男')//静态成员
    // 实例成员是实例化对象的成员
    console.log(p1.name)//实例成员
    console.log(p1.age)//实例成员

  • 15
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值