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

js进阶笔记之构造函数

目录

一、构造函数

   1、 创建对象

2、new执行过程

 3、带参数构造函数

4、实例成员与静态成员

二、内置构造函数

1、Object静态方法

 2、包装类型

3、Array

1、map方法  

2、find方法

3、findIndex( ) 

4、some与every

5、reverse()

6、reduce方法     

7、forEach() 方法

8、filter( )


一、构造函数

构造函数是专门用于创建对象的函数,如果一个函数使用 new 关键字调用,那么这个函数就是构造函数。

<script>// 定义函数function foo() {console.log('通过 new 也能调用函数...');}// 调用函数new foo;
</script>

 

总结:

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

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

  3. 构造函数的返回值即为新创建的对象

  4. 构造函数内部的 return 返回的值无效!


   1、 创建对象


    
    1.字面量对象

    const obj = { uname: 'John' , age: 20 }

    2.new Object
  

 // const obj = new 0bject({ uname: 'John' , age: 20 })const obj = new 0bject( )obj.uname = 'John'obj.age = 20console.log(obj)


 

    3.通过构造函数(自定义)创建

    构造函数--->1.构造出对象的函数,
             2.将来通过new调用
             3.构造函数名首字母建议大写
 

内置内构函数(Array,Date,Object)
    自定义构造函数

    定义学生构造函数
    function Student( ) {
    //添加属性    this===创建出来的对象
    this.属性名=属性值
    this.方法名=funcion() {  }

    //不需要写return,默认会返回this,假如显示指定return
    // return基本类型会被忽略, return引用类型将来new得到的也是该引用类型 
    //return [  ]
    
    }
 

 //  定义学生构造函数function Student() {// 添加属性this.school = '大前端学院'this.age = 18}ƒ// 基于Student构造函数创建对象const s1 = new Student()const s2 = new Student()console.log(s1)console.log(s2)

调用
    const s1=new Student( )

    无参数时  小括号可以省略
    const s1=new Student

2、new执行过程

new 关键字来调用构造函数-->得到一个对象
    1.实际参数传递给形式参数
    2.内部先创建一个空对象 {  },并且让this指向该空对象
    3.执行函数体
    4.返回这个对象

 //  定义学生构造函数function Student() {this.school = '大前端学院'this.age = 18this.sayHi = function () {console.log('sayHi')}}const s1 = new Student()console.log(s1)s1.sayHi()const s2 = new Student // 无参数 小括号可省略console.log(s2)

 3、带参数构造函数

   function Student(age){this.name='张三'this.age=agethis.speek=function() {console.log('speek')}}const s1=new Student(20)console.log(s1)console.log(s1.age)

4、实例成员与静态成员

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

实例(对象)   new出来的对象叫实例对象    new过程即实例化对象过程

    实例成员指的是new出来的对象中的属性或方法
    访问:对象 . 属性名
     school age sayHi 都叫实例成员
    const s1 = new Student( 19)
    console.log(s1.school)

    静态成员   通过构造函数.属性=值
    通过构造函数.属性去访问    

    Student.nation = 'china'
      console.log ( Student.nation)

<!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></head><body><script>// 实例(对象) new出来的对象叫实例对象 new过程即实例化对象过程// 实例成员指的是new出来的对象中的属性或方法function Student(age) {// 添加属性 this===创建出来的对象this.school = '大前端学院'this.age = agethis.sayHi = function () {console.log('sayHi')}}// school age sayHi 都叫实例成员const s1 = new Student(19)console.log(s1.school)// 静态成员 通过构造函数.属性  = 值// 通过构造函数.属性去访问 Student.nation = 'china'console.log(Student.nation)// Date.now() 静态方法</script></body>
</html>

总结:

  1. 构造函数内部 this 实际上就是实例对象,为其动态添加的属性和方法即为实例成员

  2. 为构造函数传入参数,动态创建结构相同但值不同的对象

注:构造函数创建的实例对象彼此独立互不影响。

 

在 JavaScript 中底层函数本质上也是对象类型,因此允许直接为函数动态添加属性或方法,构造函数的属性和方法被称为静态成员。

<script>// 构造函数function Person(name, age) {// 省略实例成员}// 静态属性Person.eyes = 2Person.arms = 2// 静态方法Person.walk = function () {console.log('^_^人都会走路...')// this 指向 Personconsole.log(this.eyes)}
</script>

总结:

  1. 静态成员指的是添加到构造函数本身的属性和方法

  2. 一般公共特征的属性或方法静态成员设置为静态成员

  3. 静态成员方法中的 this 指向构造函数本身

 

 

二、内置构造函数

内置的构造函数:Array   Object    Date    String    Number
    Function  创建函数


静态方法:Object.keys()
    Object.values()
    Object.assign()
    Array.isArray()
    Date.now()
    Array.from()

1、Object静态方法

Object.keys(obj)  获取所有属性组成的数组

 0bject.values(obj)        获取所有属性值组成的数组
 
    Object.assign ->ES6新增方法
    可以对多个元对象进行复制

    Object.assign(复制的对象,复制的源对象...)
 

<!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></head><body><script>const obj = {name: '华为p60 pro',price: 6999,color: 'purple',}// ['name', 'price', 'color']//  ['华为p60 pro',6999,'purple']// const keys = []// const values = []// for (let k in obj) {//   keys.push(k)·  //   values.push(obj[k])// }// console.log(keys, values)const keys = Object.keys(obj) // 获取所有属性组成的数组const values = Object.values(obj) //  获取所有属性值组成的数组console.log(keys, values)console.log(values.join('-'))//   Object.assign -> ES6新增方法const o = {}const o1 = { name: 'longge' }const o2 = { age: 18 }// o1 o2 源对象//  assign实现对象的拷贝const r = Object.assign(o, o1, o2)console.log(o)</script></body>
</html>

总结:

  1. 推荐使用字面量方式声明对象,而不是 Object 构造函数

  2. Object.assign 静态方法创建新的对象

  3. Object.keys 静态方法获取对象中所有属性

  4. Object.values 表态方法获取对象中所有属性值

 

 2、包装类型

const str = 'hello'   //const str = new String( 'hello ')//[]-> new Array ( )const r = str.substring(1)// str.substring(1)   str = nullconsole.log(r)

3、Array

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

数组的方法

1、map方法  

 高阶函数----函数的参数接受一个函数或返回值是函数的函数

    arr.map(function( item,index, arr) {// item -数组每一个元素//index -数组元素的索引/ / arr-----原数组})
  const arr=[10,20,30,40]const newArray=arr.map(function(item,index,arr){return item*2})console.log(newArray)//[20, 40, 60, 80]

 

map  映射   
    变异方法
      map对原数组循环,每次函数返回值会放入新数组中
      map不影响原数组

2、find方法

    find( ) 查找满足条件的第一个元素,  找到就返回该元素,找不到是undefined
    返回的是满足条件的元素

    arr.find ( function ( item, index , arr) {})
 const arr=[1,3,7,8,4,2,9,3,6,8]const ele=arr.find(function(item,index,arr){return item===3})console.log(ele)//3

 


3、findIndex( ) 


findIndex( )   查找满足条件的第一个元素的索引,找到就返回该元素的索引,找不到是-1
indexOf( ) 只能找具体的值

    arr.findIndex ( function ( item, index , arr) {})
    const arr=[22,34,66,22,6,7,9,0,6]const index=arr.findIndex(function(item,index,arr){return item===6})console.log(index)//4

 


4、some与every

    some对数组进行循环,发现满足条件的第一个元素则循环结束返回true,  假如所有元素不满足返回false

  

  const arr = [1,-3,20,9,11,12]//数组中是否含有偶数的元素const flag = arr.some(function (item) {return item % 2 === 0})console.log(flag)//true


every对数组进行循环,所有元素都满足返回true,假如遇到第一个不满足的元素结束,返回false,

     const arr=[3,6,8,9,-3,-6,9]const flag = arr.every(function (item) {console.log(item)return item > -9})console.log(flag)//true

 


5、reverse()

 翻转数组

    对原数组进行翻转

 const arr=[1,2,3,4,5,6]console.log(arr.reverse())//[6, 5, 4, 3, 2, 1]
6、reduce方法     
    const arr = [1,2,3,4]arr.reduce( function (prev,current,index, arr) {console.log( prev,current, index)return prev + current})

    第一次 prev指向第一个元素, current指向第二个元素, index是current指向的元素的下标
    第二次prev代表上一次函数返回值,current继续指向下一个元素
    ... .
    最后一次函数的返回值作为reduce最终的结果

    /*
    prev->1 current->2 return 3
    prev->3 current->3 return 6
    prev->6 current->4return 10
    */

arr.reduce(function(prev , current) { },初始值)
记忆:指定初始值,prev第一次就指向该初始值,以后的prev是上一次函数返回值, current指向第一个元素
      没有指定初始值,prev第一次就指向数组第一个元素,current指向第二个元素,以后的prev是上一次函数返回值


7、forEach() 方法


    forEach代替for循环
 

   arr.forEach(function (item,index, arr) {console.log(item)})
    const arr=[2,4,6,8,9,44,22]let sum=0arr.forEach(function(item){sum+=item})console.log(sum)//95

 


forEach没有返回值   影响原数组

8、filter( )

过滤  把符合条件的元素组成一个新数组

  

  const newArr = arr.filter(function (item,index) {return item > 9})console.log( newArr)


 

相关文章:

js进阶笔记之构造函数

目录 一、构造函数 1、 创建对象 2、new执行过程 3、带参数构造函数 4、实例成员与静态成员 二、内置构造函数 1、Object静态方法 2、包装类型 3、Array 1、map方法 2、find方法 3、findIndex( ) 4、some与every 5、reverse() 6、reduce方法 7、forEach() …...

Codesys数据类型(2.7):扩展数据类型之 别名 详解

Codesys代码代写&#xff0c;程序开发&#xff0c;软件定制&#xff0c;bug修改&#xff0c;问题咨询&#xff1a; T宝搜索店铺【林磊教育】 定义及声明 别名的目的是声明出 基本数据类型&#xff0c;结构体&#xff0c;枚举、共用体(UNION)、功能块、指针备用名字&#xff0c…...

白盒子测试总结

白盒子测试&#xff0c;也称为结构测试、透明盒测试、逻辑驱动测试或基于代码的测试&#xff0c;是一种测试用例的设计方法。白盒测试需要全面了解被测试程序的内部逻辑结构&#xff0c;并对所有逻辑路径进行测试。其基本方法包括&#xff1a; 语句覆盖&#xff1a;设计若干个…...

字符数组基础知识

字符数组是存放字符数据的数组&#xff0c;其中每一个元素存放的值都是单个字符。 字符数组&#xff1a;由字符类型的元素组成&#xff0c;其定义与初始化方式&#xff0c;以及对数组元素的引用都与整数数组类似&#xff0c;代码示例 char c[5]{h,e,l,l,,o}; 注意&#xff1…...

Oracle EBS 重新打开库存会期间

由库存某些账务用户操作错误,如:汇率错误、单位转换错误、BOM单据用量错误,需要反向操作纠正少量而有影响成本比较大的数据。但是,库存会计期已经关闭,需要重新打开库存会计期。根据官方文整理一份重新打开库存期间的脚本: 测试Oracle EBS版本: RDBMS : 12.1.0.2.0 Orac…...

java项目之社区互助平台(ssm+vue)

项目简介 社区互助平台实现了以下功能&#xff1a; 1、一般用户的功能及权限 所谓一般用户就是指还没有注册的过客,他们可以浏览主页面上的信息。但如果有中意的社区互助信息时&#xff0c;要登录注册&#xff0c;只有注册成功才有的权限。2、管理员的功能及权限 用户信息的添…...

unity C#设置文件为不可见

unity C#设置文件为不可见 /// ///设置文件为隐藏// /// using UnityEngine; using System.IO;public class SetFolderInvisible : MonoBehaviour {private void Start(){string folderPath "Qi/Video";// 将文件夹属性设置为隐藏和系统SetFolderAttributes(folder…...

DITTEL控制器维修SENSITRON6-2AE

DITTEL工控产品维修包括&#xff1a;德国DITTEL平衡测试仪维修,DITTEL模块&#xff0c;过程监控模块&#xff0c;DITTEL控制器&#xff0c;平衡头&#xff0c;机电平衡头&#xff0c;显示器&#xff0c;平衡系统等产品。 DITTEL过程控制模块维修 DM6000是一个过程控制模块&…...

django restful framework序列化与反序列化

在前后端分离开发中&#xff0c;对于RESTfulAPI设置&#xff0c;一般需要将查询/更新数据以JSON方式进行返回。 序列化 Model.py from django.db import models class User(models.Model):username models.CharField(verbose_name用户名,max_length10)age models.IntegerF…...

Flutter:多线程Isolate的简单使用

在flutter中如果要使用线程&#xff0c;需要借助Isolate来实现。 简介 在Flutter中&#xff0c;Isolate是一种轻量级的线程解决方案&#xff0c;用于在应用程序中执行并发任务。Isolate可以被认为是独立于主线程的工作单元&#xff0c;它们可以在后台执行任务而不会阻塞应用程…...

SAP的一些当说不说的常识

ABAP中的WDA与FRMbopf restful和odata postman软件 SAP中MM模块相关 SAP 物料 移动类型 https://www.cnblogs.com/rainysblog/p/4133259.html T移动类型文本含义一般用途T-code101GR 收货直接收货工单入库&#xff0c;购买成品入库MIGO/CO11N102用于PO冲销的收货冲销直接…...

Java运行时数据区和常用指令

Java运行时数据区是Java虚拟机规范中定义的一块区域&#xff0c;用于存储Java程序在运行过程中需要使用到的数据。这些数据包括&#xff1a; 1. 堆区&#xff1a;用于存储对象实例&#xff0c;是Java内存中最大的一块区域。2. 方法区&#xff1a;用于存储已被虚拟机加载的类信…...

hdfsClient_java对hdfs进行上传、下载、删除、移动、打印文件信息尚硅谷大海哥

Java可以通过Hadoop提供的HDFS Java API来控制HDFS。通过HDFS Java API&#xff0c;可以实现对HDFS的文件操作&#xff0c;包括文件的创建、读取、写入、删除等操作。 具体来说&#xff0c;Java可以通过HDFS Java API来创建一个HDFS文件系统对象&#xff0c;然后使用该对象来进…...

【前端学java】语法练习-工具类的封装(13)

往期回顾&#xff1a; 【前端学java】JAVA开发的依赖安装与环境配置 &#xff08;0&#xff09;【前端学 java】java的基础语法&#xff08;1&#xff09;【前端学java】JAVA中的packge与import&#xff08;2&#xff09;【前端学java】面向对象编程基础-类的使用 &#xff08…...

Git 基本操作

目录 创建仓库命令 git init git clone 提交与修改 git add git status git diff git commit git reset git rm git mv git checkout git switch git restore 提交日志 git log git blame 远程操作 git remote git fetch git pull git push Git 的工作就…...

Oracle-分析函数(累计求和,排序等)

在Oracle中分析函数又称为开窗函数 分为以下两类&#xff1a; 第一类&#xff1a;是聚合分析函数&#xff0c;主要包含&#xff08;sum&#xff0c;count&#xff0c;AVG、MAX、MIN等&#xff09;&#xff0c;主要是对内部分组的数值按照要求内部聚合处理&#xff1b; 第二类&a…...

4本期刊被踢!11月SCI/SSCI目录已更新

​2023年11月20日&#xff0c;科睿唯安更新了Web of Science核心期刊目录。 此次更新后SCIE期刊目录共包含9481本期刊&#xff0c;SSCI期刊目录共包含3551本期刊。此次SCIE & SSCI期刊目录更新&#xff0c;与上次更新&#xff08;2023年10月&#xff09;相比&#xff0c;共…...

JS中Cookie的基本使用

JavaScript 创建Cookie&#xff1a; JavaScript 读取 Cookie &#xff1a; JavaScript 修改 Cookie&#xff1a; JavaScript 删除 Cookie &#xff1a; JavaScript Cookie&#xff08;JavaScript 的 Cookie&#xff09;是一种在Web浏览器中存储和检索用户信息的机制。它允许…...

关闭windows防火墙命令

关闭windows防火墙命令 打开windows PowerShell (管理员) 或 CMD (管理员) 指令&#xff1a; 查看当前防火墙状态&#xff1a;netsh advfirewall show allprofiles 关闭防火墙&#xff1a;netsh advfirewall set allprofiles state off 开启防火墙&#xff1a;netsh advfirewa…...

excel-gen.js 导出excel 功能

目录 概要 整体架构流程 html部分&#xff1a; js部分&#xff1a; json部分&#xff1a; 小结 概要 功能会使用到如下插件&#xff1a; jszip.min.js FileSaver.js jquery.min.js excel-gen.js highcharts.js exporting.js export_data.js 主要是highcharts图表…...

拼多多股权曝光:腾讯持股13.8% 价值1319亿 是最大机构股东

雷递网 雷建平 5月9日拼多多(NASDAQ: PDD)日前发布20-F文件&#xff0c;文件显示&#xff0c;截至2026年3月18日&#xff0c;拼多多一共有 5,693,585,848股A类股&#xff0c;没有B类股&#xff0c;拼多多创始人黄峥持有1,409,744,080股&#xff0c;持股比例为24.8%&#xff0c;…...

续:封装哈希表实现MyUnorderedMap MyUnorderedSet(复刻STL)

文章目录前言一、回顾核心设计&#xff1a;通用哈希表的适配性二、完整代码实现&#xff08;复用通用哈希表&#xff0c;可直接复制&#xff09;三、测试MyUnorderedMap & MyUnorderedSet&#xff08;验证功能&#xff09;四、核心知识点&#xff08;面试高频&#xff0c;必…...

基于MCP协议构建AI编程对话本地搜索引擎:cursor-history-mcp实战

1. 项目概述&#xff1a;为你的AI对话记忆安一个“外置大脑”如果你和我一样&#xff0c;深度依赖 Cursor 这类 AI 编程助手&#xff0c;那你一定有过这样的时刻&#xff1a;上周和 Claude 讨论的那个精妙的数据库优化方案&#xff0c;具体是怎么实现的来着&#xff1f;上个月为…...

2026年5月9日 8 个国外小项目背后,真正能卖钱的是“窄需求”

今天不追 AI 风口&#xff1a;8 个国外小项目背后&#xff0c;真正能卖钱的是“窄需求” 日期&#xff1a;2026年5月9日 栏目定位&#xff1a;只拆具体国外项目、帖子、工具和需求信号。不是项目搬运&#xff0c;也不是副业鸡汤&#xff0c;而是判断&#xff1a;这个信号背后有…...

MySQL-基础篇-SQL

SQL通用语法 1、SQL语句可以单行或多行书写&#xff0c;以分号结尾。2、SQL语句可以使用空格/缩进来增强语句的可读性。3、MySQL数据库的SQL语句不区分大小写&#xff0c;关键字建议使用大写。4、注释&#xff1a; 单行注释&#xff1a;-- 注释内容 或 # 注释内容(MySQL特有&am…...

基于MCP协议构建Cursor团队数据AI助手:从原理到实战部署

1. 项目概述&#xff1a;为你的AI助手装上团队管理的“X光机” 如果你和我一样&#xff0c;是Cursor的深度用户&#xff0c;并且管理着一个开发团队&#xff0c;那你肯定有过这样的时刻&#xff1a;想知道过去一周团队里谁写代码最勤快&#xff0c;谁用的AI Credits最多&#x…...

为内部知识库问答机器人集成taotoken多模型后备路由能力

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为内部知识库问答机器人集成Taotoken多模型后备路由能力 在企业内部知识库问答系统的构建中&#xff0c;服务稳定性是核心诉求之一…...

【2026最新版|收藏备用】用Skill简化大模型知识库连接,小白程序员入门必看

本文专为2026年入门大模型的小白、程序员打造&#xff0c;详细介绍如何通过Skill技术简化大模型与外部知识库的对接流程&#xff0c;对比传统RAG方法的繁琐痛点&#xff0c;手把手讲解Markdown&#xff08;.md&#xff09;格式文档的存储技巧、SKILL.md文件的技能描述与导航方法…...

GESP考级1—8注意事项

CCF/GESP考级1—8级注意事项 参加CCF/GESP考级时&#xff0c;考生需注意以下事项&#xff1a; 提前熟悉考试环境和编程工具&#xff0c;避免因操作不熟练影响发挥。仔细阅读题目要求&#xff0c;确保理解题意后再开始作答。合理分配时间&#xff0c;避免在某一题上花费过多时…...

CANN多线程Device管理

1_device_multi_thread 【免费下载链接】runtime 本项目提供CANN运行时组件和维测功能组件。 项目地址: https://gitcode.com/cann/runtime 描述 本用例展示了多线程的场景如何管理Device&#xff0c;主线程中设置Device&#xff0c;设置资源限制&#xff0c;另一个线程…...