javascript知识梳理(二):数据结构-原型(prototype)

一、前言

本篇文章的目的是尽可能的解释清楚在js运行时的原型链。我准备从三个问题着手:

  1. 原型是什么?
  2. 原型链是什么?
  3. 原型链的应用?

二、什么是原型?

  • 在编写javascript代码过程中,经常会用到ArrayObjectFunction等构造器创建对象。如下:
      const obj1 = {
         }
      const obj2 = new Object()
      console.log(obj1.toString) // [object Object]
      console.log(obj2.toString) // [object Object]
    
  • 如上,在创建obj1时,我们并没有给它添加toString方法。但是它却能够使用toString方法。这是为什么呢?这是因为toString方法是在Object的原型上,而在创建obj1时,会将Object的原型挂载到obj1的原型链上。Object的原型是什么呢,可以通过浏览器控制台console.log(Object.prototype)打印出来。如下:
      console.log(Object.prototype)
      console.log(typeof Object.prototype) // object
      console.log(Object.prototype === obj1.__proto__) // true
      // constructor: ƒ Object()
      // hasOwnProperty: ƒ hasOwnProperty()
      // toLocaleString: ƒ toLocaleString()
      // toString: ƒ toString()
      // ....
    
  • 每一个构造方法都有一个prototype属性,它构造的每一个对象,都会有一个__proto__属性,这个**__proto__属性就是原型**。而且原型也只是一个普通的对象。在javascript中,每一个对象,都有自己的原型。万物皆对象,指的就是所有的数据类型,都有一个共同的原型,Object.prototype。所以他们都是Object构造方法创建的。

三、什么是原型链

  • 通过上面的例子,可以知道,所有的对象,都有一个共同的原型,那就是Object.prototype。但是,Object.prototype的方法却不多,而在实际开发中,有很多方法都是Object.prototype中没有,本身也没声明,但是却可以用的,比如:

      const arr = []
      arr.splice(0, 1, 1)
      console.log(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值