【JS重点15】原型对象概述

news2024/11/18 23:25:59

目录

一:构造函数缺陷

二:原型

1 原型是是什么

2 原型对象的作用

3 原型对象this指向问题

4 利用原型对象添加方法

给JS内置构造函数Array添加最大值方法

给JS内置构造函数Array添加求和方法

三:Constructor属性

四:如何赚钱

一:构造函数缺陷

通过使用JS来实现面向对象编程,可以通过构造函数实现封装。但一个很严重问题便是JS构造函数存在浪费内存的问题

例如:

function Fn(name, age, song) {
      this.name = name
      this.age = age
      this.song = function () {
        console.log('如果这都不算爱');
      }
    }
    const zxy = new Fn('张学友', 50)
    const gfc = new Fn('郭富城', 49)
    console.log(zxy, gfc);

以上代码中,通过构造函数的方式创建了zxy、以及gfc两个实例对象,但是执行构造函数中函数体中代码时,会声明两个功能完全相同的song()方法代码。这样便会造成内存的浪费,因为可以通过原型的方式实现所有对象使用同一个函数,可以达到节省内存目的。

二:原型

能够利用原型对象实现实例对象中方法共享

1 原型是是什么

原型是一个构造函数上的属性(prototype),同时该属性又是一个对象,我们称为原型对象

    function Star(name) {
      this.name = name
    }
    const zxy = new Star('张学友')
    console.log(Star.prototype);//Object

2 原型对象的作用

共享方法。因为原型对象可以挂在函数,可以把那些实例化对象身上通用的方法,直接定义在prototype对象上,这样所有对象的实例就可以共享这些方法。

同时,对象实例化过程中不会多次创建原型上函数,可以节约内存。

3 原型对象this指向问题

<script>
    let that
    function Star(name) {
      this.name = name
    }
    const zxy = new Star('张学友')
    Star.prototype.sing = function () {
      that = this
    }
    zxy.sing()
    console.log(that === zxy);//true

  </script>

通过以上案例,原型对象中this指向实例化对象

4 利用原型对象添加方法

给JS内置构造函数Array添加最大值方法

<script>
    //给Array构造函数添加最大值
    Array.prototype.max = function () {
      return Math.max(...this)
//this指向实例化对象arr
//...this为展开运算符,用于将arr展开成1,2,3
    }
    const arr = [1, 2, 3]
    console.log(arr.max());//3
  </script>

给JS内置构造函数Array添加求和方法

Array.prototype.sum = function () {
//方法1      
      let sum = 0
      for (let index = 0; index < this.length; index++) {
        sum += arr[index]
      }
      return sum
//方法2
       return this.reduce((prev,item)=>prev+item,0)
    }
    console.log(arr.sum());//6

三:Constructor属性

每一个原型对象都有一个constructor属性,该constructor属性用于指该原型对象的构造函数

    function Star() {}
    Star.prototype = {
      sing: function () {
        console.log('sing');
      },
      song: function () {
        console.log('song');
      }
    }
    console.log(Star.prototype);

之前是通过在prototype原型对象身上追加属性方式,使构造函数获得方法;但是通过赋值方式,向原型对象中添加方法的话,原来的原型对象中的constructor属性就没有了。

Star.prototype = {
      constructor:'Star'
      sing: function () {
        console.log('sing');
      },
      song: function () {
        console.log('song');
      }
    }

因此要通过constructor属性使原型对象重新指向构造函数


四:如何赚钱

现在是否厌倦了程序员朝九晚五的生活、在校大学生是否愿意在校进行人生中的第一次创业、是否正在看此篇文章的你愿意通过五年努力让自己开上梦想的车子。

那就从提升底层认知开始,加入微木的知识星球:微木的创业思考

专属于创业者的交流集中地,创业、认知提升找微木!

1 创业底层方法论

2 从千万本书书籍中挑选出的,人生必读书目清单。

3 认知提升学习资源(秘密)

4 寻找赚钱项目底层方法论

5 好书精华提炼

6 深度链接微木

每天0.3元/天,欢迎加入专属于创业者的交流集中地

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1838664.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

应用无感,透明加密!麒麟信安商用密码改造方案助力密改合规

数字信息化时代&#xff0c;在产业政策与市场驱动的共同作用下&#xff0c;密码产品和应用服务需求日趋旺盛&#xff0c;合规、正确、有效地使用密码&#xff0c;是数据安全防护体系中的有效手段。但当前&#xff0c;各行各业信息系统中国产密码算法应用不合规、未使用、使用不…

使用Python实现自动化查询IP威胁情报

解决的问题 一名网络安全从业人员在做日常网络安全运营分析时&#xff0c;就从防火墙、IDP、WAF等安全设备的日志分析计算&#xff0c;基本都会面对成千上万条日志&#xff0c;好一点的可能会有态势感知之类安全产品提供辅助分析&#xff0c;如果没有的就只能单条进行分析&…

彻底卸载Ubuntu双系统

操作系统 文章目录 操作系统前言一、把开机启动项设为默认Windows启动二、删除Ubuntu系统分区三、删除开机启动引导项 前言 我们卸载Ubuntu双系统&#xff0c;可能出于以下原因&#xff1a; 1、Ubuntu系统内核损坏无法正常进入 2、Ubuntu系统分配空间不足&#xff0c;直接扩区…

如何规范信息技术课堂纪律

在信息技术课堂上&#xff0c;为了营造一个良好的学习环境&#xff0c;确保学生能够专注于学习任务&#xff0c;我们需要采取一系列措施来规范课堂纪律。以下是一些具体而详细的建议&#xff1a; 一、明确课堂规则 上课座位固定&#xff1a;学生的座位应固定&#xff0c;未经…

分享一个dnslog在线平台

DNSLog Platform 页面只有两个按钮&#xff0c;点击Get Subdomain可以随机生成一个dnslog 点击Refresh Record&#xff0c;刷新这个dnslog的记录。可以查看到这条dnslog的IP地址和创建时间。

vue elementui table给表格中满足条件的每一条记录添加计时器

需求&#xff1a; 在前端给表格中给满足条件的每一条记录增加一个计时器&#xff0c;用于计算工作时长。 1.数据库中存储的有每条记录的作业开始时间&#xff0c;将当前时间和作业开始时间计算一个差值&#xff0c;作为作业时长的初始值&#xff1b; 2.把满足条件的每条记录绑…

为什么很多Java程序员会下意识觉得Java的就是最好的?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;做为一个真正热爱编程&#…

信捷PLC与上位机通讯-以太网通讯dll

应用场景 最近做项目&#xff0c;电气部分PLC选用了国产的信捷PLC&#xff0c;需要考虑上位机与信捷PLC通讯的问题&#xff0c;直接读写寄存器或线圈。 解决方案 信捷官网找资料&#xff0c;介绍的各种通讯方法&#xff0c;感觉都不是很好理解&#xff0c;而且也没办法直接拿…

二刷算法训练营Day27 (Day26 休息) | 回溯算法(3/6)

目录 详细布置&#xff1a; 1. 39. 组合总和 2. 40. 组合总和 II 3. 131. 分割回文串 详细布置&#xff1a; 1. 39. 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同…

【数据结构】线性表之《无头单链表》超详细实现

单链表 一.链表的概念及结构二.顺序表与链表的区别与联系三.单链表的实现1.创建单链表2.初始化单链表3.购买节点4.打印单链表5.插入操作1.头插2.尾插3.给定位置之前插入 6.删除操作1.头删2.尾删3.删除给定位置的结点 7.查找数据8.修改数据9.求单链表长度10.清空单链表11.销毁单…

python代码

# 请在______处使用一行代码或表达式替换# 注意&#xff1a;请不要修改其他已给出代码s input("请输入一个字符串:") print("{:*^30}".format(s))# 请在______处使用一行代码或表达式替换 # # 注意&#xff1a;请不要修改其他已给出代码a, b 0, 1 while …

程序员们,能告诉我你们为什么选择arch linux吗?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; Arch Linux 受到程序员青…

Qt|海康摄像头多个页面展示问题

为大家分享一个使用海康摄像头的小功能&#xff0c;希望对大家有用~ 使用场景&#xff1a; 在程序中多个不同功能页面需要展示摄像头的实时预览画面&#xff0c;该如何高效的展示呢&#xff1f; 对于海康摄像头的实时预览接口调用流程&#xff0c;如下所示&#xff1a; 按照流…

GD32F4xx 移植agile_modbus软件包与电能表通信

目录 1. agile_modbus1.1 简介1.2 下载2. agile_modbus使用2.1 源码目录2.2 移植3. 通信调试3.1 代码3.3 通信测试1. agile_modbus 1.1 简介 agile_modbus是一个轻量级的Modbus协议栈,主要特点: 支持RTU和TCP协议,采用纯C语言开发,不涉及任何硬件接口,可直接在任何形式的…

Java学习 (一) 环境安装及入门程序

一、安装java环境 1、获取软件包 https://www.oracle.com/java/technologies/downloads/ .exe 文件一路装过去就行&#xff0c;最好别装c盘 &#xff0c;我这里演示的时候是云主机只有C盘 2、配置环境变量 我的电脑--右键属性--高级系统设置--环境变量 在环境变量中添加如下配…

有路网整体布局

有路网地址 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>.…

昇思25天学习打卡营第1天 | 快速入门

内容介绍&#xff1a;通过MindSpore的API来快速实现一个简单的深度学习模型。 具体内容&#xff1a; 1. 导包 import mindspore from mindspore import nn from mindspore.dataset import vision, transforms from mindspore.dataset import MnistDataset 2. 处理数据 fro…

Gobject tutorial 六

Instantiatable classed types Initialization and destruction 类型的实例化是通过函数g_tpye_create_instance()实现的。这个函数首先会查找与类型相关的GTypeInfo结构体&#xff0c;之后&#xff0c;查询结构体中的instance_size和 instance policy即 n_preallocs(在 2.10版…

Nuxt3页面开发实战探索

title: Nuxt3页面开发实战探索 date: 2024/6/19 updated: 2024/6/19 author: cmdragon excerpt: 摘要&#xff1a;这篇文章是关于Nuxt3页面开发实战探索的。它介绍了Nuxt3的基础入门&#xff0c;安装与配置&#xff0c;项目结构&#xff0c;内置组件与功能&#xff0c;以及页…

持续集成jenkins+gitee

首先要完成gitee部署&#xff0c;详见自动化测试git的使用-CSDN博客 接下来讲如何从git上自动拉取代码&#xff0c;实现jenkins无人值守&#xff0c;定时执行测试&#xff0c;生成测试报告。 需要这三个安装包 由于目前的jenkins需要至少java11到java17的版本&#xff0c;所以…