JavaScript基础(12)_构造函数、this

news2024/10/7 10:15:25

我们每次创建对象时,常常会遇到属性和方法大量相同的情况,如果每次都创建相似的对象,代码就显得冗长多余,所以为了优化,我们往往利用函数调用的形式来简化这些代码,因为普通函数建立的对象并不能区分不同的对象,因此构造函数应运而生。

构造函数

个人解释:构造函数就是创建对象的函数,便于多对象代码优化。
官方解释:构造函数就是通过函数创建多个属性和方法相同的对象。

执行流程:
1、在内存中立刻创建一个空对象。
2、构造函数中的this指向构造函数new出来的实例对象。
3、逐行执行函数中的代码
4、将新建的对象作为返回值返回。

构造函数和普通函数区分:

1、构造函数也是普通函数,创建方式和普通函数没区别,不过构造函数习惯上首字母大写(便于与普通函数区分)。
2、构造函数不需要return就可以返回结果(返回的是一个新对象),普通函数没return会返回undefined。
3、构造函数时必须使用new关键字调用来实例化对象,普通函数不需要。
4、构造函数属性和方法前必须添加this,普通函数不需要。
5、普通函数this指向window,构造函数this指向new出来的实例对象。

this

解析器在调用函数时,每次都会向函数内部传递一个隐含的参数,这个隐含的参数就是this。this指向的是一个对象,这个对象我们称之为函数执行的上下文对象,根据函数的"调用方式"不同,this会指向不同的对象。this可以理解为"当前对象的"。

1、以函数的形式调用时,this永远都是window。
2、以方法的形式调用时,this就是调用方法的那个对象。
3、以构造函数的形式调用时,this就是新创建的那个对象。

示例:

<script>
        // 普通方式创建对象
        var person1 =
        {
            name:"张三",
            age:16,
            grade:6,
            show_id:function()
            {
                console.log("0001");
            }
        }
        var person2 =
        {
            name:"李四",
            age:21,
            grade:8,
            show_id:function()
            {
                console.log("0002");
            }
        }
        var person3 =
        {
            name:"王五",
            age:18,
            grade:6,
            show_id:function()
            {
                console.log("0003");
            }
        }

        // 以函数形式(工厂方法)创建对象
        function person(name,age,grade,id)
        {
            var per = new Object();
            per.name = name;
            per.age = age;
            per.grade = grade;
            per.show_id = function()
            {
                console.log(id);
            }
            return per;
        }
        var per1 = person("张三",16,6,"0001");
        var per2 = person("李四",21,8,"0002");
        var per3 = person("王五",18,6,"0003");
        console.log(per1);

        // 以构造函数形式创建对象
        function Person(name,age,grade,id)
        {
            this.name = name;
            this.age = age;
            this.grade = grade;
            this.show_id = function()
            {
                console.log(this.id);
            }
        }
        var per11 = new Person("张三",16,6,"0001");
        var per22 = new Person("李四",21,8,"0002");
        var per33 = new Person("王五",18,6,"0003");
        console.log(per11);
</script>

 

 

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

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

相关文章

Spark 3.0 - 2.机器学习核心 DataFrame 应用 API 与操作详解

目录 一.引言 二.创建 DataFrame 1.CreateDataFrame 2.RDD toDF By Spark implicits 3.By Read Format File 三.常用处理 API 1.select 选择 2.selectExpr 表达式 3.collect / collectAsList 收集 4.count 统计 5.limit 限制 6.distinct 去重 7.filter 过滤 8.ma…

Matlab:创建分类数组

Matlab&#xff1a;创建分类数组基于字符串数组创建分类数组添加新元素和缺失的元素基于字符串数组创建有序分类数组基于分 bin 数值数据创建有序分类数组此示例说明如何创建分类数组。categorical 是一个数据类型&#xff0c;用来存储值来自一组有限离散类别的数据。这些分类可…

FTX 深度数据复盘

Nov 2022, Sabrina Data Source: Footprint Analytics Dashboards 11月2日&#xff0c;Coindesk 公布了 Alameda 的私人财务文件&#xff0c;这是一家由 FTX 创始人 Sam Bankman-Fried 拥有的风险投资和交易公司&#xff0c;与该交易所密切相关&#xff0c;从而引发了加密货币…

Spring Framework 6.0 框架

Spring Framework 6.0.0 现已正式发布。 “这是 2023 年及以后新一代框架的开始&#xff0c;拥抱了 OpenJDK 和 Java 生态系统中当前和即将到来的创新。同时&#xff0c;我们将其精心设计为针对现代运行时环境的 Spring Framework 5.3.x 的直接升级。” 作为核心框架的重大修订…

脑肽载体Angiopep-2、906480-05-5、TFFYGGSRGKRNNFKTEEY

Angiopep-2 hydrochloride 是脑肽载体。抗肿瘤药物与 Angiopep-2 肽载体的结合可提高其在脑癌中的活性. Angiopep-2 hydrochloride is a brain peptide vector. The conjugation of anticancer agents with the Angiopep-2 peptide vector could increase their efficacy in th…

【正点原子FPGA连载】 第三章 硬件资源详解 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第三章 硬件资源…

提升Mac运行速度的十大小技巧,你用过几个?

经常听到小伙伴在抱怨PC电脑很慢&#xff0c;但是其实Mac电脑随着用的时间增长&#xff0c;运行速度也会越来越慢&#xff0c;那么造成Mac运行慢的原因有很多&#xff0c;可能是操作系统过时未更新&#xff0c;也可能是内存&#xff08;RAM&#xff09;不足&#xff0c;以下小编…

终于把下载安装更新的功能整出来了,记录关键点

我的第一个安卓应用终于也有了APP内安装更新的功能&#xff08;赶上末班车了吗&#xff09;&#xff0c;记录一些关键点&#xff0c;方方面面的。 托管检测更新和下载服务 由于没有服务器&#xff0c;这两个核心功能可以托管到一些比较好的平台。检测我用的是蒲公英分发&…

MySQL8.0分析查询语句EXPLAIN

文章目录学习资料分析查询语句EXPLAINidselect_typepartitions&#xff08;可略&#xff09;type【重点】possible_keys和keykey_len【重点】refrows【重点】filteredExtra【重点】EXPLAIN四种输出格式传统格式JSON格式SHOW WARNINGS的使用学习资料 【MySQL数据库教程天花板&a…

《深度学习进阶 自然语言处理》第五章:RNN通俗介绍

文章目录5.1 概率和语言模型5.1.1 概率视角下的word2vec5.1.2 语言模型5.1.3 将CBOW模型用作语言模型的效果怎么样&#xff1f;5.2 RNN5.2.1 循环神经网络5.2.2 展开循环5.2.3 Backpropagation Through Time5.2.4 Truncated BPTT5.2.5 Truncated BPTT的mini-batch学习5.3 RNN的…

会话跟踪技术。

目录 一、会话跟踪技术 二、Cookie 介绍 1、Cookie 基础 2、Cookie 使用细节 三、Session 介绍 1、Session 基本介绍 2、Session的原理分析 3、Session的使用细节 一、会话跟踪技术 ▶ 会话 会话:用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&a…

SAP 直接外部数据库技术配置手册-Oracle

一、操作步骤: 1、SAP Basis配置TNS文件:tnsnames.ora 事务码AL11下的 DIR_SETUPS变量D:\usr\sap\<SID>\SYS\profile双击进入文件路径oracle可以查看到文件 tnsnames.ora (不是路径D:\oracle\<SID>\102\NETWORK\ADMIN下的tnsnames.ora文件),加入如下信息(…

cubeIDE开发, stm32的WIFI通信设计(基于AT指令)

一、stm32的WIFI配置 通常WIFI模块就是一个独立的单片机&#xff0c;只是内置了WFIF通信软件的单片机&#xff0c;并该通信软件提供了AT通信指令集给开发人员&#xff0c;基于这些指令集我们就可以针对项目需要进行二次集成开发出所需的业务应用软件。 本文本文采用的开发板是s…

一、什么是计算机网络

1.1 概述 信件的要素&#xff1a; 打电话时包括连接和接通过程&#xff0c;要关注包括拨打者的状态和接听者的状态&#xff0c;称为TCP连接。发短信时只要发送者将短信发送出去即可&#xff0c;是否被接收或者发送的过程中是否有丢失这些都不关注&#xff0c;称之为UDP连接。计…

CentOS7安装jdk

文章目录前言准备工作一、将jdk的压缩文件传递到虚拟机里面二、解压缩三、配置环境变量前言 在大数据的技术中&#xff0c;Linux的环境是基础&#xff0c;jdk则是这些大数据工具的基础&#xff0c;在这篇博文中&#xff0c;我们主要介绍如何在Linux环境里安装jdk&#xff0c;以…

MySQL8.0优化 - 索引的数据结构

文章目录学习资料索引的数据结构B树常见索引概念聚簇索引特点优点缺点限制二级索引&#xff08;辅助索引、非聚簇索引&#xff09;回表联合索引Innodb的B树索引注意事项1、根页面位置万年不动2、内节点中目录项记录的唯一性3、一个页面最少存储2条记录索引的代价学习资料 【My…

Python可视化必备,在Matplotlib/Seaborn中轻松玩转图形拼接!

数据展示时&#xff0c;在同一页面上混合排版多个图形是一种常见的用法。 本次分享一个Python轮子patchworklib&#xff1a; 通过|、/轻松实现图形排列&#xff1b;比matplotlib、seaborn等自带子图功能更加灵活&#xff1b;灵感源于R中的patchwork。目录 在Matplotlib中使用…

【Java学习笔记】第四章 面向对象编程三部曲(中)

【Java学习笔记】第四章 面向对象编程三部曲&#xff08;上&#xff09; 【Java学习笔记】第四章 面向对象编程三部曲&#xff08;中&#xff09; 【Java学习笔记】第四章 面向对象编程三部曲&#xff08;下&#xff09; 文章目录5. 面向对象编程&#xff08;中&#xff09;5…

gdb调试 入门

程序的调试过程主要有&#xff1a;单步执行&#xff0c;跳入函数&#xff0c;跳出函数&#xff0c;设置断点&#xff0c;设置观察点&#xff0c;查看变量。 You can run "gdb" with no arguments or options; but the most usualway to start GDB is with one argume…

ANDROID ROOT FIDDLER HTTPS 抓包

参考 adb 修改手机代理方式_userwyh的博客-CSDN博客_adb shell settings put global http_proxy 手机模拟器安装证书并抓包_虚无-缥缈的博客-CSDN博客_模拟器安装证书 安卓手机使用adb添加系统证书方法 - 知乎 设置设备代理&#xff08;需要ROOT 设置代理&#xff1a; adb…