JavaScript进阶笔记--深入对象-内置构造函数及案例

news2024/12/23 15:08:59

深入对象

创建对象三种方式

  1. 利用对象字面量
  2. new Object({…})
  3. 利用构造函数
// 1. 字面量创建对象
    const obj1 = {
      name: 'pig',
      age: 18
    };
    console.log(obj1); // {name: "pig", age: 18}
    // 2. 构造函数创建对象
    function Pig(name, age) {
      this.name = name;
      this.age = age;
    };
    const obj2 = new Pig('piki', 19);
    console.log(obj2);
    const obj3 = new Object({
      name: 'pigDaddy',
      age: 45
    })
    console.log(obj3);
    // 3. Object.create()方法创建对象
    const obj4 = Object.create(null);
    obj4.name = 'piggy';
    obj4.age = 20;
    console.log(obj4);

构造函数

【快速创建多个类似对象】 – 技术上常规函数,

但,

  • 命名以字母大写开头
  • 只能由“new”操作符执行 ==> 实例化

不用写return,写了也无效

过程

  1. 创建新对象
  2. 构造函数this指向新对象
  3. 执行构造函数代码
  4. 返回新对象
 // 构造函数
    function Goods(name, price, count) {
      this.name = name;
      this.price = price;
      this.count = count;
    }
    // 创建实例对象
    const mi = new Goods('xiaomi', 1999, 20);
    const wei = new Goods('huawei', 3999, 59);
    const vivo = new Goods('vivo', 1888, 100);
    // 输出实例对象的属性
    console.log(mi.name); // xiaomi
    console.log(mi.price); // 1999
    console.log(mi.count); // 20
    console.log(wei.name); // huawei
    console.log(wei.price); // 3999
    console.log(wei.count); // 59
    console.log(vivo.name); // vivo
    console.log(vivo.price); // 1888
    console.log(vivo.count); // 100

实例&静态成员

分类

  • 实例成员:实例对象中的属性和方法(结构相同但值不同)
  • 静态成员:构造函数的属性和方法 – 相当于c++中的静态关键字static

静态成员方法中的this指向构造函数本省,如Math.random()就是静态方法

// 静态对象
    function Person() {
      this.name = 'John';
      this.age = 30;
    }
    //静态属性
    Person.eyes = 2;
    Person.arms = 2;
    //静态方法
    Person.walk = function () {
      console.log("你应该会走路吧,孩子");
      console.log(this.eyes);
    }
    Person.walk(); // 你应该会走路吧,孩子 2

内置构造函数

==> 字符串,数值,布尔值等都有方法和竖向【JS底层进行包装】

Object

==> 用于创建普通对象

Object.keys – 返回一个数组,关于对象的属性名

Object.values – 返回一个数组,关于对象的属性值

Object.assign(obj1,obj2) – 将obj2对象中的内容,复制到obj1中,多用于追加属性

name: '张三',

      age: 20
    }
    console.log(Object.keys(obj));
    console.log(Object.values(obj));
    //返回的是数组类型
    const obj1 = {
      name: 'ls',
      age: 26
    }
    Object.assign(obj1, { gender: 'man' })
    console.log(obj1);

Array

reduce – 返回累计处理结果,用于求和

返回一个值

语法

arr.reduce(function(上一次值,当前值){},初始值)

若由初始值,则改变累加结果

上一次值为

  • 一开始第一次循环为初始值,若无,则为0
  • 后来为上一次的上一次值+当前值

累加的过程总共循环n次

const arr = [1, 2, 3, 4, 5];
    const all = arr.reduce((pre, cur) => pre + cur, 0);
    console.log(all);
    const all2 = arr.reduce((pre, cur) => pre + cur, 10);
    console.log(all2);
方法作用
join将数组元素拼接为字符串
find查找元素,返回第一个符合条件的元素,若没,则返回undefinded
every如果所有元素都符合条件,则返回true,否则,则返回false
some判断元素中如果由符合条件的,就返回true,否则,则返回false
concat合并两个数组,返回一个新的数组
sort对原数组的元素进行排序
splice删除或替换原数组单元
findIndex根据数组元素值来查找对应的索引值,若找不到,返回-1
reverse反转数组,返回一个新数组
// join传参为拼接分隔符
const arr = ['I', 'am', 'spider', 'man'];
    const str = arr.join(' ');
    console.log(str);
    //find
     const arr = [1, 2, 3, 4, 5];
    const isSix = arr.find((item) => item === 4);
    console.log(isSix);

//every返回布尔值
 const arr = [1, 2, 3, 4, 5];
    const BigtoZero = arr.every(item => item > 0);
    console.log(BigtoZero);

//some返回布尔值
 const arr = [3, 2, 4, 6, 8];
    const isOne = arr.some(item => item % 2 === 1)
    console.log(isOne);
//concat
 const arr1 = [1, 2, 3];
    const arr2 = [4, 5, 6];
    const newArr = arr1.concat(arr2);
    console.log(newArr);
//sort
 const arr = [5, 3, 1, 2, 4];
    const sortArr = arr.sort((a, b) => b - a);
    console.log(sortArr);
//splice
  const arr = [1, 2, 2, 3, 4, 5, 6];
    const newarr = arr.splice(2);
    console.log(newarr);
//reverse
const arr = [5, 4, 3, 2, 1];
    const reverseArr = arr.reverse();
    console.log(reverseArr);
//findIndex
 const arr = [1, 2, 3, 4, 5];
    const Three = arr.findIndex(item => item === 6);
    console.log(Three);

  • splice方法的注释

    start: 指定修改的起始位置。

  • deleteCount: 表示要删除的元素数量。如果设置为0,则不会删除元素。

  • item1, …, itemN: 要添加到数组中的新元素。

Number

toFixed(n) – 保留几位小数,四舍五入,默认不保留小数

综合案例

根据后台提供的数据,渲染购物车页面

[!IMPORTANT]

如何有效利用JS方法来高效处理数据并渲染到页面上

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    .list {
      width: 990px;
      margin: 100px auto 0;
    }

    .item {
      padding: 15px;
      transition: all .5s;
      display: flex;
      border-top: 1px solid #e4e4e4;
    }

    .item:nth-child(4n) {
      margin-left: 0;
    }

    .item:hover {
      cursor: pointer;
      background-color: #f5f5f5;
    }

    .item img {
      width: 80px;
      height: 80px;
      margin-right: 10px;
    }

    .item .name {
      font-size: 18px;
      margin-right: 10px;
      color: #333;
      flex: 2;
    }

    .item .name .tag {
      display: block;
      padding: 2px;
      font-size: 12px;
      color: #999;
    }

    .item .price,
    .item .sub-total {
      font-size: 18px;
      color: firebrick;
      flex: 1;
    }

    .item .price::before,
    .item .sub-total::before,
    .amount::before {
      content: "¥";
      font-size: 12px;
    }

    .item .spec {
      flex: 2;
      color: #888;
      font-size: 14px;
    }

    .item .count {
      flex: 1;
      color: #aaa;
    }

    .total {
      width: 990px;
      margin: 0 auto;
      display: flex;
      justify-content: flex-end;
      border-top: 1px solid #e4e4e4;
      padding: 20px;
    }

    .total .amount {
      font-size: 18px;
      color: firebrick;
      font-weight: bold;
      margin-right: 50px;
    }
  </style>
</head>

<body>
  <div class="list">
    <!-- <div class="item">
      <img src="https://yanxuan-item.nosdn.127.net/84a59ff9c58a77032564e61f716846d6.jpg" alt="">
      <p class="name">称心如意手摇咖啡磨豆机咖啡豆研磨机 <span class="tag">【赠品】10优惠券</span></p>
      <p class="spec">白色/10寸</p>
      <p class="price">289.90</p>
      <p class="count">x2</p>
      <p class="sub-total">579.80</p>
    </div> -->
  </div>
  <div class="total">
    <div>合计:<span class="amount">1000.00</span></div>
  </div>
  <script>
    //要取得得属性
    // name price--toFixed(2)保留两位小数 picture count spec--需要进行解构处理
    // 
    const goodsList = [
      {
        id: '4001172',
        name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',
        price: 289.9,
        picture: 'https://yanxuan-item.nosdn.127.net/84a59ff9c58a77032564e61f716846d6.jpg',
        count: 2,
        spec: { color: '白色' }
      },
      {
        id: '4001009',
        name: '竹制干泡茶盘正方形沥水茶台品茶盘',
        price: 109.8,
        picture: 'https://yanxuan-item.nosdn.127.net/2d942d6bc94f1e230763e1a5a3b379e1.png',
        count: 3,
        spec: { size: '40cm*40cm', color: '黑色' }
      },
      {
        id: '4001874',
        name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',
        price: 488,
        picture: 'https://yanxuan-item.nosdn.127.net/44e51622800e4fceb6bee8e616da85fd.png',
        count: 1,
        spec: { color: '青色', sum: '一大四小' }
      },
      {
        id: '4001649',
        name: '大师监制龙泉青瓷茶叶罐',
        price: 139,
        picture: 'https://yanxuan-item.nosdn.127.net/4356c9fc150753775fe56b465314f1eb.png',
        count: 1,
        spec: { size: '小号', color: '紫色' },
        gift: '50g茶叶,清洗球'
      }
    ]
    //1.获取数据,对一些需要的数据进行解构和变换


    let str = ``;
    goodsList.forEach(goods => {
      const { name, price, picture, count, spec, gift } = goods;
      const price1 = price.toFixed(2);
      const whatStr = Object.values(spec).join('/');
      let giftArr;
      if (gift !== undefined) {
        giftArr = gift.split(',');

      }
      const countPrice = (price1 * count).toFixed(2);


      if (gift !== undefined) {
        str += `
      <div class="item">
      <img src="${picture}" alt="">
      <p class="name">${name}
        `
        giftArr.forEach(item => {
          str += `
          <span class="tag">【赠品】${item}</span>
          `
        })
        str += `
      <p class="spec">${whatStr}</p>
      <p class="price">${price1}</p>
      <p class="count">x${count}</p>
      <p class="sub-total">${countPrice}</p>
    </div>
      `
      } else {
        str += `
      <div class="item">
      <img src="${picture}" alt="">
      <p class="name">${name}</p>
      <p class="spec">${whatStr}</p>
      <p class="price">${price1}</p>
      <p class="count">x${count}</p>
      <p class="sub-total">${countPrice}</p>
    </div>
      `
      }
    })
    //计算合计的价格
    const allMoney = goodsList.reduce((pre, item) => pre + (item.price * 100 * item.count) / 100, 0).toFixed(2);

    //2.将数据渲染到页面中
    const list = document.querySelector('.list').innerHTML = str;
    const total = document.querySelector('.amount').innerHTML = allMoney;


  </script>
</body>

</html>

展示效果:

在这里插入图片描述

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

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

相关文章

RVIZ2可视化移动机器人模型

RVIZ2可视化移动机器人模型 上一节讲完joint和link&#xff0c;我们来把我们上面定义的简单的URDF(包含身体和雷达)用RVIZ2显示出来&#xff0c;直观的感受下&#xff0c;我们的机器人模型。 URDF可视化的步骤如下&#xff1a; 1建立机器人描述功能包 2建立urdf文件夹编写…

子组件向父组件传值$emit

点击子组件的按钮&#xff0c;将子组件的值传递给父组件&#xff0c;并进行提示。 子组件 <template><div><button click"emitIndex">clickme</button></div> </template> <script> export default {methods: {emitInde…

计算机毕业设计Django+Vue.js豆瓣图书推荐系统 图书评论情感分析 豆瓣图书可视化大屏 豆瓣图书爬虫 数据分析 图书大数据 大数据毕业设计 机器学习

《DjangoVue.js豆瓣图书推荐系统》开题报告 一、研究背景与意义 1. 研究背景 随着数字化时代的来临&#xff0c;图书资源日益丰富&#xff0c;用户面临着信息过载的问题。如何在海量图书中快速找到符合个人兴趣和需求的书籍成为了亟待解决的问题。传统的图书检索方式往往基于…

【含开题报告+文档+PPT+源码】基于SpringBoot的景区酒店点评系统的设计与实现

开题报告 旅游业的快速发展使得越来越多的人选择旅游作为休闲和放松的方式。景区酒店作为旅游的重要组成部分&#xff0c;承担着提供住宿和服务的重要角色。然而&#xff0c;对于游客来说&#xff0c;在选择合适的景区酒店时往往存在信息不对称的问题&#xff0c;缺乏可靠的点…

Windows 下安装 jdk8

一、简介 JDK&#xff1a;Java SE Development Kit&#xff08;Java 开发工具&#xff09;。JRE&#xff1a;Java Runtime Environment &#xff08;Java 运行环境&#xff09;。 如果想进行 Java 编程&#xff08;开发人员&#xff09;&#xff0c;需要安装 JDK&#xff1b;如…

【含开题报告+文档+PPT+源码】基于过滤协同算法的城市旅游网站的设计与实现

开题报告 几年的疫情对生活的各个领域都产生了巨大的影响&#xff0c;疫情之后&#xff0c;随着国内经济的加速复苏&#xff0c;旅游业也迅速回暖。2023 年我国旅游需求迅速增多&#xff0c;一季度旅游人次为12.16 亿人次&#xff0c;较 2022 年同期增长了 46.5%。在当今数字化…

79 NAT-NAT444端口块静态映射

NAT444&#xff08;Network Address Translation 444&#xff09;是一种网络地址转换技术&#xff0c;用于将私有IP地址转换为公有IP地址&#xff0c;实现私有网络与公有网络之间的通信。 端口块静态映射是NAT444中的一种映射方式&#xff0c;它将一组端口范围映射到一个公有I…

GO 语言协程知识点学习笔记

GO 语言协程知识点学习笔记 是个人从互联网上学习整理的笔记。因个人技艺不精&#xff0c;如有纰漏&#xff0c;还请斧正。 协程&#xff1f; 协程并不是 GO 语言特有的机制&#xff0c;像 Lua、Ruby、Python、Kotlin、C/C 也都有协程的支持。区别在于有些是从语言层面支持&a…

【2024最新】基于springboot+vue的xxxx平台lw+ppt

作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;Java精选实战项…

linux源码安装slurm以及mung和openssl

一、源码安装munge 1、编译安装munge &#xff08;1&#xff09;下载munge地址&#xff1a;https://github.com/dun/munge/releases &#xff08;2&#xff09;解压编译安装&#xff1a; 1 2 3 4 5 6 7 8 创建/data目录 复制文件munge-0.5.15.tar.xz 到/data目录下 tar -Jx…

模型 知识诅咒

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。知者难悟无知惑。 1 知识诅咒案例 1.1 会议室的误解 李经理是一家科技公司的产品经理&#xff0c;他负责领导一个新产品的开发项目。项目团队由不同背景和经验的成员组成&#xff0c;包括新入职的员…

php 生成随机数

记录:随机数抽奖 要求:每次生成3个 1 - 10 之间可重复(或不可重复)的随机数,10次为一轮,每轮要求数字5出现6次、数字4出现3次、…。 提炼需求: 1,可设置最小数、最大数、每次抽奖生成随机数的个数、是否允许重复 2,可设置每轮指定数字的出现次数 3,可设置每轮的抽奖…

(32)噪声信号的时域分析:均值、方差、与功率

文章目录 前言一、生成噪声信号并画图二、计算信号的均值、方差、与功率三、结果分析 前言 本文对叠加了高斯白噪声的一段整周期余弦信号进行时域分析&#xff0c;使用MATLAB进行信号生成&#xff0c;并计算其均值、方差、与功率。最后给出对计算结果的分析&#xff0c;阐明均…

组装首页:其他组件html、css移入JS中再引入首页

组装首页 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>组装首页</title><style>* …

Java-Exception与RuntimeException

&#x1f496;简介 &#x1f4d6;Exception Exception 类是所有非致命性异常的基类。这些异常通常是由于编程逻辑问题或外部因素&#xff08;如文件不存在、网络连接失败等&#xff09;导致的&#xff0c;可以通过适当的编程手段来恢复或处理。Exception 可以进一步分为两大类…

分享一些常用的数据库性能监测工具

以下是一些常用的数据库性能监测工具&#xff1a; 一、MySQL MySQL Enterprise Monitor&#xff1a; 由 MySQL 官方推出&#xff0c;提供全面的数据库性能监控、诊断和优化功能。可以监控数据库的各种指标&#xff0c;如查询性能、连接数、缓存命中率等&#xff0c;并提供警报…

目标检测——YOLO11算法解读

作者&#xff1a;Ultralytics公司 代码&#xff1a;https://github.com/ultralytics/ultralytics YOLO系列算法解读&#xff1a; YOLOv1通俗易懂版解读、SSD算法解读、YOLOv2算法解读、YOLOv3算法解读、YOLOv4算法解读、YOLOv5算法解读、YOLOR算法解读、YOLOX算法解读、YOLOv6算…

(南京观海微电子)——HKC_5.0_QP050AS01-1_MIPI_LVDS_RGB原理及代码介绍

1. MIPI 2. LVDS 3. TTL 4.代码 //初始化代码 Generic_Short_Write_1P(0xee,0x01); // ENTER PAGE1 Generic_Short_Write_1P(0xea,0x07); Generic_Short_Write_1P(0xeb,0x12); Generic_Short_Write_1P(0x0a,0x76); // vcom //Generic_Sh…

兆易创新Cortex-M7 GD32H459适配OpenHarmony轻量系统适配教程

笔者利用国庆假期的时间适配了一款Cortex-M7 的国产厂商兆易创新GD32H459&#xff0c;开源地址&#xff1a;https://gitee.com/GD32H759_OpenHarmony OpenHarmony 4.1r 轻量系统移植到GD32H759文档 1.学习本文档的意义 1.学习如何移植OpenHarmony轻量系统4.1r到GD32 m7内核G…