当前位置: 首页 > article >正文

JS中的原型与原型链

1. 基本概念

  • 原型(Prototype):每个对象都有一个内部属性 [[Prototype]],通常通过 __proto__ 访问(非标准,但广泛支持)。

  • 原型链(Prototype Chain):对象通过原型链查找属性和方法。如果对象本身没有某个属性或方法,它会沿着原型链向上查找,直到找到或到达原型链的顶端(null)。


2. 原型的作用

  • 实现继承:通过原型链,对象可以继承其原型对象的属性和方法。

  • 共享属性和方法:原型允许多个对象共享相同的属性和方法,从而节省内

 对象中的原型

每个对象都有一个内部属性 [[Prototype]],通常通过 __proto__ 访问(非标准,但广泛支持)

我们现在创建按一个User函数来理解原型原型的概念

function User(name, age) {
    this.name = name;
    this.age = age;
    this.sayHello = function() {
        console.log('我是' + this.name)
    }
}

const user1 = new User('小王', 18)
user1.sayHello() // 我是小王
const user2 = new User('小高', 20)
user1.sayHello() // 我是小高

这里面创建了一个User构造函数,每个对象里面都有一个sayHello方法,sayHello 方法是完全一样的,没必要为每个用户单独生成一个; 所以我们可以改造一下,把方法挂载到User的原型上,当然也可以增加一个性别的属性,假设他们的性别都是一样的

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

User.prototype.sayHello = function() {
    console.log('我是', this.name + '我的性别是' + this.sex)
}
User.prototype.sex = '男'

const user1 = new User('小王', 18)
user1.sayHello() // 我是小王
const user2 = new User('小高', 20)
user1.sayHello() // 我是小高

这个就是原型用来共享数据!

什么是原型链?

重要概念:所有的对象都是通过new创建的,{} 和 [] 则是语法糖, 看下面的代码👇

var u2 = { // 对象 u2 通过 new Object 创建
  firstName: '莫',
  lastName: '妮卡'
}
// 等效于
var u2 = new Object(); 
u2.firstName = '莫';
u2.lastName = '妮卡';

上面的代码原型链如下👇

所有的对象都是通过Object创建的 ,所以当前两张图可以合并

上面的图片中从 u1->user原型->Object原型; 这就被称为原型链!

Function 中的原型链

function User(name) {
    this.name = name
}
const user1 = new User('小王')

上面的代码原型链如下

完整的图例如下👇


http://www.kler.cn/a/453743.html

相关文章:

  • VBA技术资料MF243:利用第三方软件复制PDF数据到EXCEL
  • 字节跳动Java开发面试题及参考答案(数据结构算法-手撕面试题)
  • LabVIEW数字式气压计自动检定系统
  • sentinel限流+其他
  • 使用Excel制作通达信自定义“序列数据“
  • RAG实战:构建基于本地大模型的智能问答系统
  • scala基础学习(数据类型)-数组
  • stm32引脚模式GPIO
  • 5G 模组 上位机驱动开发流程
  • hiprint结合vue2项目实现静默打印详细使用步骤
  • 破解海外业务困局:新加坡服务器托管与跨境组网策略
  • golang, go sum文件保证下载的依赖模块是一致的
  • 双指针——有效三角形的个数
  • 使用Python获取PDF文本和图片的精确位置
  • MySQL windows解压版的安装与配置方法
  • 【Kafka基础】10个Kafka基础知识,面试经常会问到
  • LLM(Large Language Model Course)大模型学习路线(课程推荐)
  • pyqt5冻结+分页表
  • 若依plus apifox导入接口显示为空
  • 设置首选网络类型以及调用Android框架层的隐藏API
  • 图像处理基础 | 格式转换.nv12转高质量.jpg灰度图 python
  • TP5 动态渲染多个Layui表格并批量打印所有表格
  • 文档解析丨高效准确的PDF解析工具,赋能企业非结构化数据治理
  • 用友-友数聚科技CPAS审计管理系统V4 getCurserIfAllowLogin存在SQL注入漏洞
  • Firewalld 防火墙详解:深入理解与实践指南
  • centos 释放系统预留内存并关闭Kdump服务