原型和原型链

2023-11-10

1、原型

  • 原型:prototype(一个对象)
  • 概念:每一个函数上,都有一个prototype(原型对象)
  • 使用场景:一般使用在构造函数上,如果给构造函数的原型prototype添加方法,构造函数构造出来的对象就能共享原型上所有的方法
var arr1 = [10, 20, 30, 40, 50];
var arr2 = [1, 2, 3, 4, 5];

// Array是数组的构造函数
// 给数组的构造函数的原型添加方法
Array.prototype.sum = function () {
    var res = 0;
    for (var i = 0; i < this.length; i++) {
        res += this[i];
    }
    return res;
}

alert(arr1.sum());
alert(arr2.sum());
alert(arr1.sum == arr2.sum); // true

2、原型链

  • 原型链:__proto__(一个属性)
  • 概念:构造函数构造出来的对象,有一个属性__proto__,指向构造出这个对象的构造函数的原型
  • 当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,就会去它的__proto__指向的原型上查找,即它的构造函数的原型prototype,如果还没有找到就会再在构造函数的prototype(一个对象)的__proto__中查找,这样一层一层向上查找就会形成一个链式结构,称为原型链
// 一只狗的构造函数
function Dog({ name, type, age }) {
    this.name = name;
    this.type = type;
    this.age = age;
}
// 通过构造函数的原型添加方法
Dog.prototype = {
    showSlef: function () {
        alert(`这是一个${this.type}的,${this.age}岁的,叫${this.name}的小狗`);
    }
}

// 创建一个对象
var xiaobai = new Dog({
    name: "小白",
    type: "泰迪",
    age: 10,
});

alert(xiaobai.__proto__ == Dog.prototype); // true

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

原型和原型链 的相关文章

  • 如何动态地从对象中提取所有元素

    如何从对象中提取特定列 我有一个列数组 我希望从对象中提取这些字段 该对象将由作为项目的映射循环函数构造 现在在这里 如何动态检查我的字段 我不想要这样的 item col 0 请告诉我一个捷径 const person firstName
  • 使用 ReactJS 旋转图像预览

    我正在尝试使用 ReactJS 旋转图像的预览 因此 我首先允许渲染预览的上传功能 然后在用户点击上传之前 我希望他们可以选择根据自己的喜好旋转图像 这是我用来预览图像的 class ImageUpload extends React Co
  • 如何使用角度在垫选择嵌套值中包含过滤器

    我正在使用带有嵌套下拉菜单的有角材料 下拉值以父级和子级为基础嵌套 我面临两个问题 自动建议不起作用 如果我输入父名称或其关联的子名称 则必须以展开模式过滤并显示特定的父视图 如果我展开第一个父视图并尝试展开第二个父视图 则第一个父视图应在
  • 在 AngularJS 和 Nodejs 之间共享代码

    使用在前端和后端之间共享代码的最佳方式是什么javascript 特别是说之间nodejs and angularjs 问题是我们使用的是相同的enums and constant values例如error codes在后端和前端 现在
  • 在一定时间后自动更改 Firestore 中的字段值 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 I m working on Javascript and here s how s my data looks like 我想要的功
  • iPhone Web 应用程序禁用缓存

    我使用 PHP 构建了一个 iPhone 网络应用程序 主 也是唯一 页面包括苹果移动网络应用程序支持 and 苹果触摸全屏元标记 以便在添加到主屏幕后可以全屏运行 然而 似乎每次我从主屏幕启动应用程序时 都会使用页面的缓存版本而不是刷新页
  • 切换 Ag-Grid 中的浮动过滤器?

    我试图通过开关或按钮单击来确定浮动过滤器的显示 看起来很简单 我应该能够在 true 和 false 之间切换 将该值提供给网格选项中的浮动过滤器 然后刷新标题 对吗 不幸的是 网格似乎总是落后一步 当我第一次点击时 什么也没有发生 当我将
  • JavaScript - babel-preset-env 不为 IE11 转换箭头函数

    我很难尝试配置 Babel 来转译 IE11 可以理解的代码 特别是箭头函数 跑步npx webpack mode development使用我的配置不会转换我的代码中的箭头函数 在eval 在生成的代码中的语句中 我可以看到所有实例都未转
  • 闭包和异步 Node.js 函数

    All 尝试了解 Node js 上下文中的闭包 异步调用 我有以下代码 timer setInterval pollOID 1000 function pollOID for channel in channels session get
  • 按周将对象数组拆分为组

    我有一个包含这样的数据的对象数组 date 01 01 2017 00 00 00 dataField1 dataField2 date 01 02 2017 00 00 00 dataField1 dataField2 date 01 1
  • Array.from 的时间复杂度

    时间复杂度是多少Array from 例如 const set new Set set add car set add cat set add dog console log Array from set time complexity o
  • 链接index.html client.js 和 server.js

    我从 Node js 开始 我的第一个程序已经遇到了问题 下面是我正在使用的代码 索引 html
  • Chrome 扩展程序导致 DOM 闪烁,该扩展程序会在页面加载之前删除 DOM 元素

    我正在编写一个 chrome 扩展 我想在页面加载之前删除内容 例如this http tech blog tomchambers me 2016 01 13 How to write a simple page rewriting Chr
  • Netlify 正在显示我的 Gatsby 网站的 html 版本

    网站建设位于https 5efbc255ca51be00080b5219 epic raman 086510 netlify app https 5efbc255ca51be00080b5219 epic raman 086510 netl
  • 如何使用 $.ajax 发送 JSON 而不是查询字符串?

    有人可以简单地解释一下如何让 jQuery 发送实际的 JSON 而不是查询字符串吗 ajax url url dataType json I was pretty sure this would do the trick data dat
  • 使用 _.extend() 进行 JavaScript 继承

    有什么区别 Employee prototype Object create Person prototype and extend Employee prototype Person prototype 两者都给出相似的结果 输出 但下划
  • 将 html

    我有一些服务器端代码当前支持 http 字节范围请求 没有任何问题 但是 我希望能够在将转码后的块发送到客户端之前使用 ffmpeg 即时转码视频文件 位于磁盘上 但 ffmpeg 要求我在获取字节时给它一个寻道时间范围来自客户 给定客户端
  • 如何捕获 google 地图的无效 API 密钥

    我有这个代码 如果密钥无效 则会弹出警报 但我想在这种情况下执行一些操作 但我不知道如何连接它 有任何想法吗 Google 不提供检查 Google 地图 API 密钥的外部方法 因此 您无法使用例如查询某些服务 此代码有效吗abcde12
  • 事件监听器如何/何时附加到 d3.js 中?

    我正在尝试制作一个 SVG 编辑器 长话短说 我需要将鼠标事件附加到
  • 如何将 JSLint 用于依赖于 JQuery 的代码段?

    我对 Javascript 比较陌生 我想通过 JSLint 运行我周末玩的那段代码 这样它就可以指出我在哪里是个十足的白痴 不幸的是 我收到了大量关于缺少函数声明的错误 这些函数声明是 JQuery javascript 库及其各种插件的

随机推荐

  • 网络安全攻防对抗之白加黑技术

    目录 一 什么是白加黑技术 二 怎么防范白加黑技术 一 什么是白加黑技术 白加黑 手法是一种利用DLL劫持技术的攻击方式 它通过在应用程序的导出目录中创建一个DLL文件 并通过LoadLibrary函数 或者找一个已有的DLL注入恶意代码
  • 多元时间序列

    多元时间序列 BiLSTM双向长短期记忆神经网络多变量时间序列预测 Matlab完整程序 目录 多元时间序列 BiLSTM双向长短期记忆神经网络多变量时间序列预测 Matlab完整程序 预测结果 评价指标 基本介绍 程序设计 参考资料 预测
  • [YAPI]导出API文档

    1 进入某个分组主页 切换到 项目列表 菜单下 点击进入其中一个项目 2 切换到 数据管理 菜单下 执行导出功能
  • 肾模?你还不会sqlalchemy!【SQLite】

    Part1什么是 sqlalchemy sqlalchemy 是 Python 的一个优秀的开源 ORM 框架 为开发者提供了方便快捷的 API 能够提高开发效率 让开发者专心于业务代码开发 而非浪费时间在数据库的维护上 今天我们就来一起了
  • 基于java的医院住院管理系统

    为了更好的满足医护人员用户的需求 本医院住院管理系统包括如下功能模块 出入院管理 病人管理 病房管理 系统用户管理模块 每个模块都有其独自的功能 以达到更好的服务于用户 系统采用BS结构 用当前最流行的java技术开发 系统架构采用MVC模
  • vue2+elementui表单手机号码、邮箱、经纬度、百分比验证

    1 手机号码验证 验证方式写在一个公共js文件中 在对应组件中引入即可 方法一 需传参 n为是否必填参数 export const isPhone n gt return required n message 不能为空 trigger bl
  • 封装、继承、多态

    目录 访问限定符 封装 继承 super关键字 super和this的比较 继承在内存中的情况 重写override 重写和重载的比较 多态 JAVA中的动态绑定机制 JAVA面向对象程序三大特性 封装 继承 多态 在类和对象阶段 主要研究
  • iTerm2配置(rz/sz命令)

    1 安装iTerm2 到iTerm2官网下载安装 2 安装HomeBrew 参考博客 https brew idayer com guide start 作者写的非常细 但我照着执行下来有2个注意事项 1 别急忙执行安装命令 先得去镜像助手
  • UNC博士计算机申请,科学网-申请美国博士研究生的自我陈述(Personal Statement)该怎么写?-周耀旗的博文...

    申请美国大学的博士研究生除了考试成绩 简历之外 常常还要写一篇长短要求不一的 自我陈述 Personal Statement 或者 目的陈述 Statement of purpose 我在美国大学做老师的时候 曾经多次参与招生委员会的工作
  • 方差,协方差、标准差,与其意义

    有国才有家 支持国产 生活中点滴做起 买手机就买华为 这是我们国家IT界的脊梁 协方差的意义和计算公式 协方差的意义和计算公式 学过概率统计的孩子都知道 统计里最基本的概念就是样本的均值 方差 或者再加个标准差 首先我们给你一个含有n个样本
  • 关于手机Camera的硬件电路知识

    前阶段 小白教同事测了些Camere的基本功耗 正愁不知道写什么的小白 突然想到了素材 于是乎便趁着周末雷雨天宅家之际 写一篇关于手机Camere的硬件文章 手机Camera 一 工作原理 关于Camera 景物通过镜头生成光学图像投射到图
  • MNIST手写体识别训练过程数据流图

    1 数据流图 2 对应的 Python 代码 import torch import torchvision import torchvision transforms as transforms import torch nn as nn
  • 嵌入式数据库知识概括

    嵌入式数据库知识概况 嵌入式数据库 Derby SQLite H2 总结 嵌入式数据库 嵌入式数据库 Embedded Database 简介 从软件角度来说 数据库分类为两种 第一种 数据库服务器 Database Server 第二种
  • Unity控制在面板上显示变量

    unity之定制Inspector Ngui 刚接触Unity时知道脚本的共有变量会在Inspector中显示出来 但是有一些确不行 前些日子添加按钮的音效 我用的是Ngui按钮也基本是UIButton 但是给button一个个挂UIPla
  • Maven配置环境变量

    在上文java在Windows配置Path环境变量 中我们找到了环境变量所在位置我们直接打开环境变量 第一步 在环境变量页面点击新建 第二步 配置MAVEN HOME 在变量名中输入 MAVEN HOME 在变量值中输入jdk安装位置 D
  • C语言qsort函数详解

    目录 一 qsort函数的使用 二 qsort函数的模拟 一 qsort函数的使用 快排函数qsort是C的库函数 它可以对输入的任何类型的数组排序 通过该函数的函数声明我们可以看出它的使用方法 举个栗子 include
  • 还不会部署高可用的kubernetes集群?企业DevOps实践之使用kubeadm方式安装高可用k8s集群v1.23.7...

    关注 WeiyiGeek 公众号 设为 特别关注 每天带你玩转网络安全运维 应用开发 物联网IOT学习 原文地址 还不会部署高可用的kubernetes集群 企业DevOps实践之使用kubeadm方式安装高可用k8s集群v1 23 7 本
  • Qt学习笔记1:创建一个QT的空项目

    初始QT 在创建QT项目时系统提供了几个不同的模板 点选模板 系统会自动为用户创建好一个基础框架方便开发 这里 我们试着不适用系统提供的基础框架 自己创建一个空的QT项目 创建工程 1 进入QT界面 选择新建工程 在跳出的选项中选择其他项目
  • Linux·i2c驱动示例

    I2C 是很常用的一个串行通信接口 常用于连接各种外设 传感器等器件 一 Linux I2C 驱动框架 Linux 内核将 I2C 驱动分为两部分 I2C 总线驱动 I2C 总线驱动就是 SOC 的 I2C 控制器驱动 也叫做 I2C 适配
  • 原型和原型链

    1 原型 原型 prototype 一个对象 概念 每一个函数上 都有一个prototype 原型对象 使用场景 一般使用在构造函数上 如果给构造函数的原型prototype添加方法 构造函数构造出来的对象就能共享原型上所有的方法 var