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

【JavaScript】09-构造函数+数据常用函数

本文介绍构造函数的使用以及一些数据类型的使用。

目录

1. 深入对象

1.1 创建对象的三种方式

1.1.1 对象字面量创建

1.1.2 new Object创建

1.1.3 构造函数创建

1.2 实例成员和静态成员

1.2.1 实例成员

1.2.2 静态成员

2. 内置构造函数

2.1 基本包装类型

2.2 Object

2.2.1 获得对象里的属性和值

2.2.2 对象的拷贝

2.3 Array

2.3.1 基本语法

2.3.2 练习-计算薪资

2.3.3 其他方法

① find 

② every

2.3.4 伪数组转为真数组

2.4 String

2.4.1 split

2.4.2 substring

2.4.3 startsWith

2.4.4 includes


1. 深入对象

1.1 创建对象的三种方式

1.1.1 对象字面量创建

const o = {
    name : 'zzz'
}

1.1.2 new Object创建

    <script>
        const obj = new Object();
        // 追加属性
        obj.uname = 'zzz';
        console.log(obj);
        // 也可以这样
        // const obj = new Object({uname:'pink'});
    </script>

1.1.3 构造函数创建

自定义函数来创建对象

构造函数是一种特殊的函数,主要用来初始化对象

常规的 {...} 语法允许创建一个对象。比如创建了A对象,继续创建B对象时需要重新写一遍。

此时可以通过构造函数来快速创建多个类似的对象

把要创建的所有对象的公共属性抽取出来封装到一个函数

两个约定:

1. 函数命名以大写字母开头

2. 他们只能由 new 操作符来执行

    <script>
        // 创建一个猪 构造函数
        function Pig(uname,age){
            this.uname = uname;  // 将形参赋值给了对象的uname属性 this.uname
            this.age = age;
        }
        const pappe = new Pig('佩奇',6);
        // console.log(new Pig('佩奇',6));  // 也可以
        console.log(pappe);
    </script>

说明:

1. 使用new关键字调用函数的行为被称为实例化

2. 实例化构造函数时没有参数时可以省略 ()

3. 构造函数无需return 返回值即为新创建的对象 写了return也是无效的


练习:

写一个Goods构造函数

里面包含属性 name 商品名称,price价格,count 库存数量

实例化多个商品对象,并打印到控制台

<script>
        function Goods(name,price,count){
            // this.name 相当于给创建的对象追加了属性name
            this.name = name;
            this.price = price;
            this.count = count;
        }
        const xiaomi = new Goods('小米',1999,20);
        const Huawei = new Goods('华为',3999,89);
        const vivo = new Goods('vivo',1777,136);
        console.log(xiaomi);
        console.log(Huawei);
        console.log(vivo);
    </script>


1.2 实例成员和静态成员

1.2.1 实例成员

通过构造函数创建的对象称为实例对象,实例对象中的属性和方法称为实例成员(即实例属性和实例方法)

    <script>
        // 1.实例成员:实例对象中的属性和方法称为实例成员
        function Pig(name){
            this.name = name;
        }
        const peppa = new Pig('佩奇');
        const joe = new Pig('乔治');
        // 给peppa改名
        peppa.name = '小猪佩奇';  // 也不会影响
        // 给佩奇增加一个实例方法
        // 仍然是与joe互不影响 只是增加在 peppa的实例对象上
        peppa.sayHi = ()=>{
            console.log('hi~');
        }
        console.log(peppa === joe);  // false
        // 两个对象结构相同 但彼此互不影响
    </script>

1.2.2 静态成员

构造函数的属性和方法称为静态方法(静态属性和静态方法)

说明:

1. 静态成员只能构造函数来访问

2. 静态方法中的 this 指向构造函数

比如Date.now()   Math.PI  Math.random()等

        // 2.静态成员:构造函数的属性和方法称为静态方法
        function Pig(name){
            this.name = name;
        }
        Pig.eyes = 2;  // 静态属性 给Pig加一个eyes的属性
        console.log(Pig.eyes);  // 访问时也需要Pig. 因为这是构造函数的属性

        // 给构造函数增加一个方法 静态方法
        Pig.sayHi = function() {
            console.log(this);  //Pig
        }
        Pig.sayHi();  // 调用构造函数里的方法

实例成员是对实例对象的修改和操作。

而静态成员是对构造函数内部进行操作。


2. 内置构造函数

2.1 基本包装类型

基本数据类型:

字符串 数值 布尔 undefined null

引用类型:对象

但是有些特殊情况:

    <script>
        const str = 'pink';
        // 实际内部执行:const str = new String('pink')  实例化
        // 这是JS底层完成的 把简单数据类型 包装成 复杂/引用 数据类型
        // 所以可以使用方法
        console.log(str.length);  //4
        const num = 12;
        console.log(num.toFixed(2));  // 保留2位小数 12.00
    </script>

JS中的几乎所有数据都可以基于构造函数创建


2.2 Object

它是内置的构造函数,用于创建普通对象。

// 通过构造函数创建普通对象
const user = new Object({name:'zz',age:18});

下面有常用的静态方法(只有构造函数Object可以调用的)

2.2.1 获得对象里的属性和值

// 普通方法
const o = {name:'zz',age:18};
for(let k in o){
    console.log(k);   // 属性 name age
    console.log(o[k]) // 值 zz 18
}
    <script>
        const o = {uname : 'zz',age : 18};
        // 1.获得所有属性名
        // Object.keys(对象名)  返回的是一个属性名的数组
        console.log(Object.keys(o));  //[uname,age]

        // 2.获得所有属性值
        // Object.values(对象名)  返回一个值的数组
        console.log(Object.values(o));  //['zz',18]
    </script>

2.2.2 对象的拷贝

        // 3. 拷贝已有对象
        const o1 = {};
        // Object.assign(新,被拷贝的)
        Object.assign(o1,o);
        console.log(o1);

使用:

还可以给已有的对象添加新的内容

        // 3.1 给已有对象添加新的内容
        // Object.assign(原对象,新的内容)
        Object.assign(o,{gender:'n'});
        console.log(o);

2.3 Array

内置的构造函数,用于创建数组

const arr = new Array(3,5);
console.log(arr);  // [3,5]

创建数组建议使用字面量创建,不使用Array构造函数创建

但是有一些方法可以使用,主要是实例方法

一些形象描述帮助理解区分:

这里介绍 reduce

它是返回累计处理的结果,经常用于求和等

2.3.1 基本语法

arr.reduce(function(){},起始值)

比如求和:

arr.reduce(function(上一次值,当前值){},初始值)
    <script>
        // arr.reduce(function(上一次值,当前值){},初始值)
        const arr = [1,5,8];

        // 1.没有初始值
        const total = arr.reduce(function(prev,current){
            return prev + current;
        })
        console.log(total);  //14

        // 2.有初始值
        const total1 = arr.reduce(function(prev,current){
            return prev + current;
        },10)
        console.log(total1);   //24

        // 3.箭头函数写法
        const total2 = arr.reduce((prev,current)=>{ return prev + current;},10);
        console.log(total2);  // 24
    </script>

执行流程:


2.3.2 练习-计算薪资

需求:

① 根据数据计算当月支出薪资

    <script>
        const arr = [{
            name: 'a',
            salary: 10000
        },{
            name: 'b',
            salary: 10000
        },{
            name: 'c',
            salary: 10000
        }]

        // 如果不写初始值 这是对象数组 就变成对象的相加了显然不对
        // 所以在这里需要给初始值赋初值 0
        const total = arr.reduce((prev,current) => {
            return prev + current.salary;
        },0)
        console.log(total);  //30000
    </script>

现在每个人涨薪30%

        // 涨薪30%
        const total1 = arr.reduce((prev,current) => {
            return prev + current.salary*1.3;
        },0)
        console.log(total1);  //39000

2.3.3 其他方法

概况:

形象理解:

我们这里介绍 find 和 every


① find 

基本使用

    <script>
        const arr = ['red','blue','green'];    
        //function(){} 是回调函数
        const re = arr.find(function(item){
            return item === 'blue';
        })
        console.log(re);
    </script>

应用

        // 应用
        const arr1 = [
            {
                name: '小米',
                price: 1999
            },{
                name: '华为',
                price: 3999
            },{
                name: 'vivo',
                price: 2889
            }
        ]
        // 比如我只想要小米的东西并且返回小米的对象
        const a = arr1.find((item) => item.name === '小米');
        console.log(a);  // 返回的小米的对象{XX}

② every

测试一个数组内的所有元素是否都能通过某个指定函数的测试,并且返回一个布尔值。

基本使用

    <script>
        // every每一个是否都符合条件 都符合就返回true 否则返回false
        const arr1 = [10,20,30]
        const re = arr1.every((item) => {
            return item >= 10;
        })
        console.log(re);  // true
    </script>

如果是some 则要求至少一个满足即可


2.3.4 伪数组转为真数组

静态方法 Array.from()

<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
    <script>
        const lis = document.querySelectorAll('ul li');  // 获得li的伪数组
        console.log(lis);
        // 转为真数组
        const liss = Array.from(lis);
        console.log(liss);
    </script>
</body>


2.4 String

常见实例方法

主要介绍2-5,1前面已经介绍

2.4.1 split

    <script>
        const str = 'zz,aa';
        // 转换为数组
        const arr = str.split(',') // 原字符串中的分隔标志是 ,
        console.log(arr);  //['zz','aa']

        const str1 = '2025-3-8';
        // 把日期分开存入数组
        const arr1 = str1.split('-'); // 原字符串中分隔标志是 -
        console.log(arr1);
    </script>

2.4.2 substring

字符串的截取

        // 2.substring(开始索引,结束索引)
        const str = 'abcdefg';
        // 2.1 无结束索引
        console.log(str.substring(2));  // cdefg  没有结束的索引就一直截取到结尾
        // 2.2 有结束索引
        console.log(str.substring(3,5));  //de 结束的索引不在截取的部分中

2.4.3 startsWith

检测字符串是否以某字符开头 返回布尔值。

        // 3.startsWith()
        const str1 = '你好';
        console.log(str1.startsWith('你')); // true
        console.log(str1.startsWith('好')); // false

2.4.4 includes

判断一个字符串是否包含在另一个字符串中 返回布尔值。

        // 4.includes
        // 注意 区分大小写
        const str = '你好你好你好pink';
        console.log(str.includes('你好'));  //t
        console.log(str.includes('pink'));  //t

本文介绍构造函数的使用以及一些数据类型的使用。


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

相关文章:

  • matlab慕课学习3.1
  • 大模型工具Ollama存在安全风险
  • 【无脑 海螺AI api 合成音频 实例 】
  • HTML星球大冒险之路线图
  • 图形编辑器基于Paper.js教程24:图像转gcode的重构,元素翻转,旋转
  • AI革命编程学习:Python语法速通与高阶突破全实战(第二部分:AI辅助调试与高阶编程)
  • PaddleDetection目标检测自定义训练
  • 主流大语言模型中Token的生成过程本质是串行的
  • sparkTTS window 安装
  • 什么是Flask
  • 论文阅读笔记——π0: A Vision-Language-Action Flow Model for General Robot Control
  • 【华三】STP端口角色与状态深度解析
  • 游戏引擎学习第149天
  • [数据结构]堆详解
  • TDengine 接入帆软 BI 工具
  • 深度学习算法实战——语音识别(主页有源码)
  • Python 爬虫实战案例 - 获取拉勾网招聘职位信息
  • RuleOS:DApp开发的“破局者”,区块链创新的“加速器
  • AI自动化编程初探
  • Python----数据可视化(Seaborn三:绘图二)