八、闭包高级、对象、构造函数、实例化

news2024/12/23 23:22:42

闭包高级、对象、构造函数、实例化

闭包高级

函数被定义时生成[[scope]]->生成scope chain -> scope chain中存着上级的环境。

函数被执行的前一刻(预编译过程),生成自己的AO,排到scope chain的最顶端。

函数执行完毕的两种情况:

  • 一般情况:函数执行完毕,函数的scope chain与自身AO连线中断,函数的AO也被销毁。
  • 闭包现象:函数执行完毕,函数的scope chain与自身AO连线中断,但函数的AO没有被销毁,在内部函数的scope chain上存在

再说一遍闭包的定义

内部函数被返回到外部并保存时,一定会产生闭包现象,使原来的作用域链不释放(只要程序整个不被销毁,原来的作用域链就永不释放),从而可以对函数内部变量进行访问和更改。

闭包用途

  • 封装插件
  • 模块化编程

对象

创建对象的两种方法

  • 对象字面量

    var obj;
    obj = {
        name: 'white',
        sex: 'man',
        paly: function(){	//对象中属性值为函数的属性叫做方法
            
        }
    }
    
  • 构造函数实例化

    • 系统自带的构造函数new Object(),与对象字面量相等。
    • 自定义构造函数(构造工厂)

增、删、改、查对象的属性/方法

  1. 通过.点语法:
  • 访问(
  • 改变(改变
  • 增加(
  1. 通过关键字delete删除对象属性/方法。

在对象内部也可以操作对象的属性:

var teacher = {
	name: 'white',
    height: '178',
    weight: '80',
    sports: function(){
        teacher.weight--;
        console.log(teacher.weight);
    }
}
teacher.sports(); //79

在对象内部使用对象名.属性来访问对象自己的属性很别扭,怎么办?

->使用this,对象中this代表对象本身

var teacher = {
	name: 'white',
    height: '178',
    weight: '80',
    sports: function(){
        this.weight--;
        console.log(this.weight);
    }
}
teacher.sports(); //79

构造函数

定义

构造函数仍然是函数,在命名上我们习惯使用大驼峰命名。

我的理解构造函数是为了创建对象而存在的,于是它的内部都是this.属性名=属性值

function Teacher(){
    this.name = 'white';
    this.sex = 'man';
    this.weight = 80
    this.sports = function(){
        this.weight--;
        console.log(this.weight);
    }
}

请问:这里的this指向谁?

答:函数不执行,this不存在。想要this存在,必须实例化,谁用this就指向谁。

对象可以由构造函数实例化而创建,而this是指向对象本身的

实例化

怎么实例化new关键字

var teacher1 = new Teacher();
teacher1.sports(); //构造函数内部也可以操作对象的属性
console.log(teacher1);

在这里插入图片描述

构造函数实例化对象的好处

通过一个构造函数创建的多个对象,为不同的对象,相互之间不影响。

对于上述的构造函数有一个问题:创建出的对象虽然不同,但大家的属性都相同;现在我们想要创建的对象彼此的属性值不同,有什么办法?

传参

  • 传值

    function Teacher(name, course, sex){
      this.name = name;
      this.course = course;
      this.sex = sex;
    }
    var teacher1 = new Teacher('white', 'Math', 'man');
    var teacher2 = new Teacher('black', 'Chinese', 'woman');
    console.log(teacher1); 
    //Teacher {name: 'white', course: 'Math', sex: 'man'}
    console.log(teacher2); 
    //Teacher {name: 'black', course: 'Chinese', sex: 'woman'}
    
  • 传对象

    function Teacher(opt){
      this.name = opt.name;
      this.course = opt.course;
      this.sex = opt.sex;
    }
    var teacher = new Teacher({
        name: '沈剑心',
        course: 'Chines',
        sex: 'woman'
    })
    console.log(teacher);
    //Teacher {name: '沈剑心', course: 'Chines', sex: 'woman'}
    

基本上使用构造函数实例化时,我们都使用传对象的形式实例化对象。

这里传的对象,实际上就是我们所说的配置项,维护方便,使用方便,且配置项可以随便调换顺序。例如:

Vue.js

var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})

其实框架就是写了一个超级复杂的构造函数,我们去实例化构造函数,并初始化然后去使用。

补充两个数组方法

indexOf()
方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。

splice()
方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。

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

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

相关文章

基于天鹰算法优化的lssvm回归预测-附代码

基于天鹰算法优化的lssvm回归预测 - 附代码 文章目录基于天鹰算法优化的lssvm回归预测 - 附代码1.数据集2.lssvm模型3.基于天鹰算法优化的LSSVM4.测试结果5.Matlab代码摘要:为了提高最小二乘支持向量机(lssvm)的回归预测准确率,对…

DFA的最小化

一、实验目的 1.熟练掌握DFA与NFA的定义与有关概念。 2.理解并掌握确定的有穷自动机的最小化等算法。 二、实验要求 输入:DFA 输出:最小化的DFA 三、实验过程 1.化简DFA关键在于把它的状态集分成一些两两互不相交…

一、ArrayList源码解读

ArrayList源码 一、前言 ArrayList在日常的开发中使用频率非常高,但是JDK是如何去设计ArrayList的,这就需要我们好好去了解底层实现原理,这样使用起来才能做到心中有数;当然,还能应付面试。本篇文章会围绕ArrayList的…

王道操作系统网课笔记合集

介绍 操作系统是什么? 计算机结构大概分为四层: 用户应用程序操作系统硬件 操作系统是一类系统软件,调度硬件资源,合理分配管理软件(因此操作系统又被称作资源管理器(resource manager)&…

简洁而优美的结构 - 并查集 | 一文吃透 “带权并查集” 不同应用场景 | “手撕” 蓝桥杯A组J题 - 推导部分和

💛前情提要💛 本章节是每日一算法的并查集&带权并查集的相关知识~ 接下来我们即将进入一个全新的空间,对代码有一个全新的视角~ 以下的内容一定会让你对数据结构与算法有一个颠覆性的认识哦!!! ❗以…

【Unity 3D 从入门到实践】Unity 3D 预制体

目录 一,预制体介绍 二,创建预制体 三,实例化预制体 一,预制体介绍 预制体是 Unity 3D 提供的保存游戏对象组件和属性的方法,通过预制体可以快速的实例化挂载不同组件的游戏对象,从而减少开发难度&…

使用光隔离的调制器在电机控制中进行安全、准确的隔离电流传感

介绍 在工业电机或伺服控制应用中,准确的电流测量是控制回路的一部分。目前的测量不仅需要尽可能准确,还需要安全可靠。 工业电机或伺服控制系统通常包含高压,在过流或短路等故障事件中,这些情况需要快速检测和整流&#xff0c…

Android开发基础

文章目录前言工程项目结构hello world界面布局代码操作新页面页面间跳转简单计算器的实现思路前端控件传递数据后端实现逻辑两个Activity之间传值发送数据返回数据SQLite简单使用利用语句写在后面写在后面前言 安卓(Android)是一种基于Linux内核的开源操作系统 使用java、kot…

不就是性能测试吗?竟让我一个月拿了8个offer,其中两家都是一线大厂

随着互联网的发展,单机软件的逐渐减少,系统从单机步入“云”时代,软件系统功能和规模也越来越庞大,盗版也越来越难,用户规模也越来越大,企业盈利随之爆发式地增长。 随着用户数量的增多,系统稳…

Chrome浏览器修改用户资料(User Data)的存放位置

2022.12.13一、 原先采用的在快捷方式中修改目标的方法,没有效果。二、创建链接1. 复制2. 删除3. 创建链接mklink参考用于缓解C盘压力,将浏览器用户数据存放于其他的指定位置。简单记录一下操作步骤。 其中用户数据可以如此查找,在浏览器地址…

数字虚拟人发展简史

虚拟人的发展史就是技术的发展史 作为元宇宙时代的基石,虚拟人的发展历史与制作技术的进步高度相关。在元宇宙概念中,未来每个用户都将依托虚拟人作为自己的化身进入虚拟世界中探索,要达成这个目的,就要求数字虚拟人不仅拥有人的…

java计算机毕业设计ssm智慧消防维保系统后端设计与实现3cmg0(附源码、数据库)

java计算机毕业设计ssm智慧消防维保系统后端设计与实现3cmg0(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都…

【毕业设计】微信小程序校园跑腿系统 校园跑腿小程序 校园跑腿微信小程序

一、前言 大学是一个小社会,我们在学校学习到专业知识的时候,有会遇到很多形形色色的任务,但最重要的依旧是社会经历。很多大学生都会想着在大学闯出一片新天地,所以他们往往会选择自己或者带上志同道合的朋友来一起创业。一次好…

泛微京桥通集成SAP,让采购流程闭环、业务管理一体化

SAP作为强大的业务处理平台,推动着组织采购管理走向数字化。其中的SAP MM(MaterialManagement)(物料管理)涉及到物料管理全过程,主要包括:物料需求计划、物料主数据、采购、供应商评价、库存管理…

简单聊聊 WebSocket

简单聊聊 WebSocket 1、简介 ​  WebSocket 是一种在单个 TCP 连接上进行 全双工 通信的协议。 扩展: ​  WebSocket 与 Socket 的区别 WebSocket 是应用层的一个通信协议;Socket 是对 TCP(或UDP)抽象封装的一组接口&#xf…

浅谈责任链设计模式在框架源码中的运用

写在前面,该篇博文为我在部门的技术分享,所以文字记录不是特别详细。本文更像是一个大纲,由浅入深讲解责任链设计模式。 浅谈责任链设计模式在框架源码中的运用一、分享目的二、简单介绍三、逐个拆解四、源码环节1、Tomcat2、Spring MVC3、Sp…

【MySQL基础】什么是MySQL约束?什么是主键约束?

目录 一、什么是MySQL约束? 二、MySQL约束有什么作用? 三、MySQL约束常见七大类? 主键约束(primary key) PK 1.概念 2.主键约束的相关操作 添加单列主键 添加多列主键(联合主键) 通过修改表结构添加主键 删除主键 💟 创…

【Notebook系列第十三期】基于多模型推理任务的车辆特征识别

在之前的课程中,我们分享的推理任务大部分都只由一个模型构成,但在真实的业务场景下,往往需要我们将多个模型放在一起去运行,才能获取到这个任务的最终预期结果。 因此,本次分享将通过一个简单的示例演示如何使用 Ope…

12月13日(第11天)

腾讯云上通过面板开放端口,不起作用,解决办法:手动在服务器上开放,参考文章地址:在腾讯云控制台下配置防火墙端口无效 直接关闭防火墙是最简单的,systemctl stop firewalld,然后再再腾讯云上打开…

解决端口被占用的方法(查看端口和关闭端口)

目录 前言必读 一.简介 二、解决办法 1.查看该端口是否被占用 2.关闭占用该端口的进程 前言必读 读者手册(必读)_云边的快乐猫的博客-CSDN博客 一.简介 在使用各种端口时候经常会出现端口被占用导致代码程序无法执行或者执行错误。一般都是由于该端…