ES6 - 简单理解原型


什么是原型?

任何一个对象都具有一个原型对象,对象中有许多的属性和方法,这个对象可以使用它的原型上的所有方法


原型的使用

首先我们一定要有一个对象,这样的话才能使用它的原型对象:

// 有一个用户对象

const user = {
  name: '不知名用户',
  age: 22,
  hobby: ['跑步', '打代码', '打篮球', '穿背带裤', 'rap', '唱', '跳'],
};

// user的原型
user.__proto__.run = () => console.log('跑起来了');

user.run();

// 跑起来了

OK,看起来并没有什么大用处 🤔

我们接着往下看:

上面的是我们通过对象的 __proto__ 获取,其实我们还有一种方法,就是通过构造函数的 prototype 属性拿到原型

function User(name, age) {
  this.name = name;
  this.age = age;
}

const user = new User();

User.prototype.run = () => console.log('Run');

user.run();

// Run

实例上虽然没有该方法,但是它的原型上有该方法,那么就可以进行调用


类的原型

在之前的博文中阐述过,这里就不做过多的阐述了,类中的原型通过类的 prototype 属性来获取,其实这就是一个继承了

点击前往 => 类与面向对象


实现基于原型的继承

function Father() {
  this.run = function () {
    console.log('我跑起来了');
  };
}

function Son() {
  this.jump = function () {
    console.log('我只会跳');
  };
}

// 我们想要Son继承Father的跑的方法 --并且使用原型的继承

Son.prototype = new Father();

const son = new Son();

son.run();

// 我跑起来了

原型链

原型链其实就是这个对象的原型还有原型,它的原型还有原型…

就像我们上面的例子一样,当我们使用对象方法的时候,会首先从最近或者说当前对象上找有没有这个方法,有就执行,如果没有的话,去原型上找,原型找到之后就执行,如果还是没有的话,那么会继续去原型的原型上找,直到找到为止,没有的话就报错

等等,那么找到什么地方才算是找不到呢?或者说找到什么时候才算是个头呢?最终其实会找到我们的 Object 对象的原型

这就有一个有趣的现象了,如果我们只给到了Object 原型一个方法,那么只要是个对象且在原型链中找不到对应方法,那么就会去执行我们的object原型上的方法,什么意思呢?我们上代码演示一下:

Object.prototype.run = () => console.log('我尽然能在Object对象原型上跑起来 🤨');

const a = [];

a.run();

// 我尽然能在Object对象原型上跑起来 🤨

OK,这也证实了只要是个对象,那么它的原型链顶端就是 Object 对象的原型

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Try Tomato

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

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

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

打赏作者

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

抵扣说明:

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

余额充值