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

【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

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

相关文章:

  • Node.js原型链污染
  • 大数据_数仓建模_八股
  • 开源项目介绍:Native-LLM-for-Android
  • mitt 依赖库详解
  • 安徽省考计算机专业科目2025(持续更新)
  • SpringCloud—概述—01
  • 人工智能之数学基础:正交矩阵
  • React封装通用Form组件,类型转换、命名控件样式隔离、支持表单验证、位置自定义、自定义布局、提示信息info等功能。未采用二次封装调整灵活,包含使用文档
  • xxx **5. 物理安全** 详细解读
  • 新能源汽车能量管理:开启绿色出行新动力
  • 常见的 Git 命令
  • UV,纹理,材质,对象
  • Python----数据分析(Matplotlib四:Figure的用法,创建Figure对象,常用的Figure对象的方法)
  • MES机联网4:文档资料
  • MySQL中的脏读与幻读:概念、影响与解决方案
  • 进程模型2-进程优先级
  • 类和对象:
  • kafka消息中间件的rebalance机制
  • 介绍一下Qt中的事件过滤
  • Array and string offset access syntax with curly braces is deprecated
  • 网站建设大纲/搜索引擎营销的英文缩写
  • 弹幕网站如何做/找个免费网站这么难吗
  • 帝国cms个人网站模板/线上宣传推广方式
  • web是做网站的吗/免费b2b平台推广
  • 电商网站如何做优化/网站自助搭建
  • 网站导航栏制作教程/推广普通话宣传内容