Javacsript原型和原型链

178 阅读2分钟

一、原型

1、原型是什么

首先给出定义:给其它对象提供共享属性的对象,简称为原型( prototype )。

所有对象,都有一个隐式原型 __proto__ 属性,属性值是一个普通的对象,它被称之为这个对象的 prototype 原型。当访问对对象的某个属性时,会先在对象本身的属性上寻找,没找到就会去他的原型对象上寻找。

__proto__ & constructor 概念简介

  • proto:隐式原型,js标准里对象的原型无法直接通过属性名访问,但是多数浏览实现了__proto__(注意前后都有两个下划线)属性用来访问对象的原型。
  • constructor:构造器,创建一个函数时会为它增加一个 prototype 属性,指向原型对象,原型对象自动获得一个名为 constructor 的属性,指回与之关联的构造函数。

2. 原型的作用

原型在Javascript中是一个非常重要的概念,那么它有什么作用呢?

作用在定义中已经提到了:共享属性

如果在一个对象上找不到某个属性,就会去它的原型对象上找,以此类推直至找到,或者寻找到原型链的终点都没找到则不存在这个属性;这个特性让任意创建的对象都拥有通用的各种方法,例如:toString、hasOwnProperty、isPrototypeOf等

3. 原型的应用

共享属性的特性可以用来做很多巧妙的事情。

3.1 属性委托

普通对象上的默认方法都是来自于 Object.prototype 上的方法

先看链接 juejin.cn/post/691482…

二、原型链

什么是原型链

定义:如果要访问对象中并不存在的一个属性,就会查找对象内部 prototype 关联的对象。在查找属性时会对它进行层层寻找遍历,这个关联关系实际上定义了一条原型链

原型链最终会指向Object.prototype,原型链的终点是Object.prototype.__proto__ 也就是 null