JavaScript 构造函数 原型 原型链

在ES6之前并没有类的概念,而是通过构造函数来创建实例。
构造函数:

function Animal(name, age) {
    this.name = name;
    this.age = age;
    this.sing = () => {
        console.log('这是方法!')
    }
}

如上所示,这就是一个构造函数,他可以用来创建对象,需要使用new关键词。

    var dog = new Animal('狗蛋', '3个月');// new了一个对象,对象名字是dog
    console.log('这是dog的名字:' + dog.name)// 这是dog的名字:狗蛋
    console.log('这是dog的年龄:' + dog.age)// 这是dog的年龄:3个月
    dog.sing();// 这是方法!

通过new关键字创建的对象,有构造函数中的所有属性和方法。所以dog有name也有age还能sing。
这时候,你可能想要给Animal这个构造函数增加一些动物都有的方法和属性,希望Dog这个实例也会有这些方法和属性。

    Animal.sex = '公';
    Animal.run = () => {
        console.log('跑!')
    }
    dog.run();//run is not a function
    console.log(dog.sex)// undefined

这时候就会发现如果用dog调用run方法和访问sex属性就会出现问题,这是因为Animal.sex和Animal.run定义的是Animal这个构造函数的私有属性和方法,是Animal独有的。(可以去看一下new的过程,面试经常考)
如果想要dog也能调用run的方法,就需要给Animal的原型添加方法和属性。

    Animal.prototype.sex = '公';
    Animal.prototype.run = () => {
        console.log('跑')
    }
    console.log(dog.sex)// 公
    dog.run();// 跑

如上所示,Animal.prototype就指向了Animal这个构造函数的原型,让我们看看这个原型里面都是什么。
在这里插入图片描述在这里插入图片描述
就是我们之前定义的run方法和sex属性,还有constructor和__proto__
所以,构造函数的prototype可以添加一些公共的属性和方法,让他的实例也可以访问到。
在这里插入图片描述
那dog这个实例对象里面有什么呢?
在这里插入图片描述
在这里插入图片描述
发现里面并没有run这个方法和sex属性,但是点开__proto__发现,里面有sex和run。
在这里插入图片描述
这时候就会想,run的__proto__是不是等于Animal的。pro totype?尝试一下会发现,他们是全等的。所以,实例对象的__proto__指向了构造函数原型prototype。
在这里插入图片描述
同时,我们还能发现有个constructor(构造器),它的值好像是Animal,那我们就可以看一下dog. __ proto__.constructor是不是等于Animal。答案也是true,所以对象实例的__proto__的constructor指向了构造函数本身。
在这里插入图片描述
在这里插入图片描述

然后再一级一级地下去.
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈梵阿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值