JavaScript中原型以及原型链

本文深入探讨JavaScript中的原型和原型链概念。通过实例解析函数的prototype属性、构造函数与原型对象的相互关系,以及如何通过原型链实现属性和方法的继承。重点介绍了实例对象如何访问原型上的属性和方法,并通过代码展示了原型链的工作机制。
摘要由CSDN通过智能技术生成

在这里插入图片描述

js中原型以及原型链

什么是原型对象

每个函数身上都有一个原型,我们称之为 原型对象

函数的 prototype 属性指向原型对象,原型对象上的 constructor 指回构造函数

废话少说,直接看代码

function Person() {
  this.uname = '张三', 
  this.age = 22
}
// 原型对象
Person.prototype.sex = '男'
Person.prototype.head = 1
Person.prototype.sayName = function () {
  console.log('说名字')
}
console.log(Person.prototype)

// Person.prototype.constructor 指回构造函数
console.log(Person.prototype.constructor)

// 实例化对象
let per = new Person()
console.log(per)
console.log(per.head) // 1

原型对象如图( console.log(Person.prototype) )

我们 console.log(per.head) 会看到如图打印结果 1

在这里插入图片描述

原型对象中 constructor 指回了构造函数 Person ,而构造函数里面的 prototype 又指向了原型对象,在原型对象上添加的属性或者方法,实例化对象可以直接访问,比如在原型上添加的 head 属性,通过实例对象可以直接访问到并且在控制台输出 1,其实函数身上的很多内置的方法就是在他的原型对象上,下图可以看出在构造函数原型上添加的属性方法

实例化对象如图
在这里插入图片描述

实例化对象的__proto__ 也是指向原型对象,只能看,不能访问,在原型上定义的属性或者方法都可以看到,可以看到原型对象里面的 constructor 指回了构造函数 Person,通过 console 打印可以看到构造函数 Person

在这里插入图片描述

原型链

我们还是拿到上面的代码进行分析

function Person() {
  this.uname = '张三', 
  this.age = 22
}
// 原型对象
Person.prototype.sex = '男'
Person.prototype.head = 1
Person.prototype.sayName = function () {
  console.log('hello javascript')
}

function Chinese() {
   this.eat = function() {
       console.log('eat')
   }
}

// 让 Chinese 构造函数的原型对象等于 Person 的实例
Chinese.prototype = new Person()

// 实例化 Chinese
let chinese = new Chinese()

console.log(chinese)
chinese.sayName() 

上面代码可以分析出 Chinese 的原型是 Person 实例化对象,sayName 方法定义在 Person 构造函数的原型上

但是,我们直接在 Chinese 实例化对象上访问 sayName 方法也可以( chinese.sayName() ),会在控制台输出里面的内容 “hello javascript”,因此,从代码打印结果分析,原型对象、构造函数、实例化对象的关系
在这里插入图片描述

调用一个对象上的属性或方法,会先在自身上面找,找不到会去原型对象上找,自身的原型对象上没有会沿着__proto__ 继续向上级的原型对象上找,找不到就会返回 null

在这里插入图片描述

这种有原型串联起来的链状结构就称之为原型链,作用:提供了查找机制,例如对象的属性、方法

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值