前端进阶之——原型和原型链

在了解原型和原型链之前,我们先要了解对象的概念

JS 对象是什么?

在 JavaScript 中,对象是一种数据类型,用于表示一组相关的数据和行为。它由键值对组成,键是字符串,值可以是任何 JavaScript 类型(包括其他对象)。每一个对象(函数也是对象)都有一个特殊的属性叫做原型(prototype),它指向另一个对象,这个对象(Test.prototype)被称为原型对象, 原型对象是用来共享属性和方法的

对象的特点:

  • 属性: 对象的键值对称为属性。属性可以包含任何 JavaScript 类型的数据。
  • 方法: 对象也可以包含方法,即与对象关联的函数,可用来执行特定操作。
  • 原型: 每个对象都有一个原型,它是一个指向另一个对象的指针。原型包含对象所有属性和方法的默认值。
  • 继承: 对象可以从其他对象继承属性和方法,从而创建子对象。

在js中,函数也是一个特殊的对象 

上面提到原型的定义,每个对象都有一个原型,它是一个指向另一个对象的指针。

原型包括显式原型和隐式原型

prototype:显式原型

每个函数都有一个 prototype(显式原型)属性,都默认指向一个空的 Object 对象(全名:Object 构造函数的实例对象。这个对象并非是全空的一个对象,其内部有两个默认携带的属性(方法):__proto__、constructor。在被创建时就携带着这两个属性。我们所指的空,是指除了这两个属性外,没有我们创建的任何属性)。

如果创建一个函数

function Test(name, age){
    this.name = name
    this.age = age
}

 此时显式原型的constructor属性指向的是构造函数本身(Test)

Test.prototype.constructor === Test  // true

__proto__:隐式原型 

每个对象都有一个 __proto__ 属性。对象的隐式原型属性的值对应 “生成它的构造函数” 的显式原型的值,都指向构造函数的原型:空的 Object 对象 

原型链 

1,每个对象均存在隐式原型(__proto__),函数对象才有prototype属性

2,__proto__存在的意义在于为原型链查找提供方向,原型链查找靠的是__proto__,而不是prototype

3,函数对象的__proto__都指向Function.prototype

4,每个对象都有一个隐式原型属性(__proto__),多个原型通过__proto__链接在一起形成的链式结构就是原型链

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值