首页 > 编程语言 >JavaScript|对象

JavaScript|对象

时间:2023-07-10 16:01:38浏览次数:45  
标签:function arr 对象 JavaScript item 构造函数 属性

1 类和对象

1) 对象的概念

对象: 一个具体的实体

在现实世界中, 对象随处可见, 一个人, 一个学生, 一个杯子, 一辆汽车, 游戏里的一个英雄... 都是一个对象

2) 对象的组成

如何描述一个对象呢

比如,

  • 每个人都有姓名, 年龄, 性别这些特征.
  • 游戏里的英雄都有生命值, 攻击力, 防御力这些特征.

对象除了这些特征外, 还有一些行为/动作

比如,

  • 人可以吃饭, 睡觉
  • 游戏里的英雄可以移动, 可以放技能

在程序里,

  • 把对象的特征叫做属性, 使用变量来描述
  • 把对象的行为叫做方法, 使用函数来描述

因此, 我们得出一个重要结论:

对象是由属性和方法组成的!!

3) 类的概念

类: 具有相同特征的事物的集合

我们把具有相同特征和行为的实体抽象出来, 就形成了一个类.

比如: 把人集合在一起, 就形成了人类, 把王者荣耀里的英雄集合起来, 就形成了英雄类

  • 每一个人类都有一些相同的特征, 比如: 姓名, 性别, 年龄, 身高, 体重...等
  • 每一个英雄也有一些相同的特征, 比如: 生命值, 攻击力, 防御力...等

4) 程序中的类与对象

那么如何使用程序来描述这些相同的特征呢?

可以定义一个模板/规范/设计图纸, 然后通过这个模板/规范/设计图纸生产一个个的实体.

  • 我们把定义的这个模板叫做类
  • 把生产出来的实体叫做对象
  • 把生产的过程叫做实例化

5) 类和对象的关系

img

类和对象的关系, 可以认为是整体和个体, 抽象和具体的关系

通过上面的描述, 总结起来说, 就是

  • 类是对象的集合
  • 对象是类的实例化

6) 小结

  1. 对象是由属性和方法组成的
  2. 属性就是变量, 方法就是函数
  3. 类是对象的集合, 对象是类的实例化

补充: 由于类是对象的集合, 通常我们也可以说类由属性和方法组成~

2 JS中的类和对象

1) 构造函数的定义

在JS中, ES6之前没有类(class)的概念, 主要是通过构造函数来模拟的.[^1]

语法

function 构造函数名 () {
    // 函数体
}
  1. 使用function关键字表示定义一个构造函数
  2. 构造函数名一般首字母大写

示例: 2-1构造函数的定义.html

function Person() {
    
}

通过以上方式就可以定义一个Person构造函数, 相当于定义好了一个Person类

2) 构造函数的作用

通过构造函数实例化对象

在JS中, 我们通过构造函数(类)来实例化对象

语法

new 构造函数名()

示例: 2-2通过构造函数实例化对象.html

// 一. 定义一个构造函数
function Person() {
    
}
// 二. 实例化一个对象, 赋值给变量p
var p = new Person();
console.log(typeof p); // object

以上代码

  • 通过new关键字, 产生了一个对象, 并赋值给变量p
  • 通过typeof p测试变量p的类型为object, 说明p是一个对象

在构造函数中定义属性

构造函数规定了由该类实例化出来的对象应该包含哪些属性

比如, 由学生类实例化出来的学生对象都应该有姓名, 年龄这些属性

function Student () {
    this.uname = null;
    this.age = null;
}

在构造函数的内部, 我们通过this.属性名的方式来定义属性

构造函数虽然可以规定实例对象应该包含哪些属性, 但是并不能确定实例对象的属性值

比如 人类都应该有名字这个属性, 但是具体叫什么名字, 只有在一个人出生的时候才去确定

因此, 在实例化对象的时候, 需要将具体的数据传递给构造函数

示例: 2-3在构造函数中定义属性.html

// 一. 定义一个学生类
function Student(n, a) {
    this.uname = n;
    this.age = a;
}
// 二. 实例化对象
var stu = new Student('xiaoming', 20);

重要结论

​ 构造函数主要完成属性的初始化!!!

3) 小结

  1. 通过构造函数定义类(规定应该包含哪些属性名)
  2. 通过new实例化对象(在实例化时, 确定属性值)
  3. 构造函数主要完成属性的初始化

3 对象的方法

1) 方法的定义

我们已经知道

  1. 类由属性和方法组成
  2. 在JS中, 通过构造函数定义类
  3. 在构造函数中可以通过this.属性名定义属性

那么, 在构造函数中是否也可以通过this.方法名定义方法呢?

2) 方法的使用(调用)

语法

对象.方法名()
  • 由于方法就是一个函数, 在后面加小括号表示方法的调用

示例

// 三. 调用方法 -- 对象.方法名()
stu.sayHi(); // 大家好

3) 小结

  1. 一般不在构造函数中定义方法
  2. 方法的调用语法: 对象.方法名()

4 常用的内置对象

1) 常用的内置对象

  • Math对象
  • Date对象
  • 字符串对象
  • 数组对象
  • JSON对象

学习方法

学习一个内置对象的使用,只要学会其常用成员的使用即可,我们可以通过查文档学习,可以通过MDN/W3C来查询。
Mozilla 开发者网络(MDN)提供了有关开放网络技术(Open Web)的信息,包括 HTML、CSS 和万维网及 HTML5 应用的 API。
MDN:https://developer.mozilla.org/zh-CN/

2) Math对象的常用方法

方法名 功能
Math.floor() 向下取整
Math.max()/Math.min() 求最大和最小值
Math.random() 获取范围在[0,1)内的随机值

3) Date对象的常用方法

方法名 功能
getFullYear() 获取年份
getMonth() 获取月份(0~11)
getDate() 获取日期(1~31)
getDay() 获取星期(0~6)
getHours() 获取小时
getMinutes() 获取分钟
getSeconds() 获取秒

4) 数组对象的常用方法

方法名 功能 返回值
push() 在末尾添加元素 新数组的长度
pop() 删除最后一个元素 删除的元素的值
slice() 截取子数组 新数组
splice() 通常用于删除某个指定元素 新数组

示例

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      const arr = [1, 2, 3]
      // 数组的变异方法: 修改原数组

      // push: 在原数组的末尾添加一个元素, 并返回数组的长度
      let res = arr.push(4, 5)
      console.log(arr)
      console.log(res)

      // pop: 删除数组的最后一个元素, 并返回元素的值. 会改变数组长度
      res = arr.pop()
      console.log(arr, res)

      // unshift: 在数组的头部添加一个元素
      // shift: 在数组的头部删除一个元素
    </script>
  </body>
</html>

示例2

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      const arr = ['red', 'green', 'blue']

      // 查找函数 find
      function handler(item) {
        // console.log(item)
        if (item == 'yellow') {
          return true
        }
      }
      let res = arr.find(handler)
      console.log(res)

      // 查找index索引 findIndex
      res = arr.findIndex(function (item) {
        if (item == 'blue') {
          return true
        }
      })
      console.log(res)

      function findIndex(arr, item) {
        for (let i = 0; i < arr.length; i++) {
          if (arr[i] == item) {
            return i
          }
        }
      }

      // forEach: 遍历数组, 依次获取数组的每一个元素
      arr.forEach(function (item) {
        console.log(item)
      })

      // map, filter, reduce
      const nums = [1, 2, 3]
      let newNums = nums.map(function (item) {
        return item * 2
      })
      console.log(newNums)
      newNums = nums.filter(function (item) {
        if (item >= 2) {
          return true
        }
      })
      console.log(newNums)
    </script>
  </body>
</html>

5) JSON对象的常用方法

方法名 功能 返回值
JSON.parse(str) 将JSON字符串转换成JS对象 JS对象
JSON.stringify(obj, null, 2) 将 JS 对象转换为 JSON 字符串 JSON字符串

标签:function,arr,对象,JavaScript,item,构造函数,属性
From: https://www.cnblogs.com/tangjielin/p/17541067.html

相关文章

  • JavaScript|流程控制
    一.概念流程控制就是来控制代码按照一定结构顺序来执行主要有3种结构顺序条件循环二.顺序顺序结构是程序中最简单、最基本的流程控制,它没有特定的语法结构,程序会按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。三.条件根据不同的条件,执行不同的路径......
  • JS中的浏览器对象
    作为一种脚本语言,JavaScript代码不能独立运行,通常情况下我们需要借助浏览器来运行JavaScript代码,所有Web浏览器都支持JavaScript。除了可以在浏览器中执行外,也可以在服务端或者搭载了JavaScript引擎的设备中执行JavaScript代码,浏览器之所以能够运行JavaScript代码就......
  • 大量创建对象的性能
    大量创建对象的性能注:试验中,均统一开启O3优化。试验均在同一系统上进行。背景在构建一种通用图片对象时,一种可能的实现是将每个像素作为一个对象处理。以2560*1440为例,约\(3.6\times10^6\)像素,因此在构建图片时,需要创建大量像素对象。本文讨论C++下创建大量对象的性能以及......
  • 函数对象
    函数对象定义定义了operator()的对象就是函数对象。函数的封装可以使用std::function对函数(指向函数的指针)、lambda表达式、bind表达式、函数对象、指向成员函数的指针、指向成员变量的指针;简单示例#include<functional>#include<iostream>intfun(inta){std::c......
  • 西门子PID调节仿真程序,1200plc和1500plc通用,只需一个PLC实物,就能轻松实现PID工艺对象
    西门子PID调节仿真程序,1200plc和1500plc通用,只需一个PLC实物,就能轻松实现PID工艺对象的仿真,是学习PID的参数的好工具。针对这套程序,录制了一段视频解说,手把手教你如何使用博途PID调节工具和触摸屏PID画面的操作,非常值得拥有哦ID:7115632550149443......
  • js中的浏览器对象
    作为一种脚本语言,JavaScript代码不能独立运行,通常情况下我们需要借助浏览器来运行JavaScript代码,所有Web浏览器都支持JavaScript。除了可以在浏览器中执行外,也可以在服务端或者搭载了JavaScript引擎的设备中执行JavaScript代码,浏览器之所以能够运行JavaScript代码就......
  • 面向对象三
    面向对象三一、static案例:publicclassPerson{//2:赋初始值{System.out.println("匿名代码块");}//1:只执行一次static{System.out.println("静态代码块");}//3publicPerson(){System.out.println("构造方法"......
  • 通用权限系统-Dozer对象转换
    Dozer对象转换介绍Dozer是一个JavaBean到JavaBean的映射器,它可以递归地将数据从一个对象复制到另一个。通常情况下,这些JavaBeans将是不同的复杂类型。Dozer支持简单的属性映射,复杂的类型映射,双向映射,隐式-显式映射,以及递归映射。这包括映射集合属性,这些集合属性也需要......
  • 面向对象二
    面向对象二封装该露的露,该藏的藏我们设计程序要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴漏少量的方法给外部使用。封装(数据的隐藏)通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏......
  • TypeScript系列 3.接口和对象类型
    本系列知识部分基于小满ZS的TypeScript系列教程。我也会补充一些视频没有的内容。interface介绍interface即接口,在ts中用于描述对象的“形状”。js是鸭子类型,鸭子类型的通俗说法是:“如果它走起路来像鸭子,叫起来也是鸭子,那么它就是鸭子。”只要一个对象包含interface中......