js小题3:构造函数介绍与普通函数对比

一、构造函数介绍:

JavaScript中,构造函数是用于创建和初始化一个由new关键字生成的对象的特殊函数。构造函数的名字通常以大写字母开头,但这并不是JavaScript语法的一部分,而是一种约定俗成的命名规范,有助于区分构造函数和普通函数。

  • 示例:
function Person(name, age) {  
    this.name = name;  
    this.age = age;  
  
    // 还可以添加其他方法和属性  
    this.say= function() {  
        console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);  
    };  
}  
  
// 使用new关键字和构造函数创建一个新的Person对象  
var obj = new Person('xiaoming', 30);  
  
// 访问对象的属性和方法  
console.log(obj.name); // 输出: xiaoming
console.log(obj.age);  // 输出: 30  
obj.say();            // 输出: Hello, my name is xiaoming and I'm 30 years old.

在上面的例子中,Person是一个构造函数,它接受两个参数nameage,并使用this关键字来设置新创建对象的属性。this在构造函数中引用的是新创建的对象。

构造函数的一个常见错误是忘记使用new关键字来调用它们。如果忘记使用new,那么this将不会引用新创建的对象,而是引用全局对象(在浏览器中是window对象)。这通常会导致意外的全局变量和难以调试的错误。
image.png

二、构造函数特点

  1. 命名约定:
    构造函数的命名通常以大写字母开头,以区分它们与其他函数(尽管这不是强制性的,但遵循这个约定可以提高代码的可读性)。
  2. 使用new关键字:
    当你使用new关键字和一个构造函数时,JavaScript会创建一个新的空对象,将这个新对象的[[Prototype]](内部链接)链接到构造函数的prototype对象上,然后将this关键字绑定到这个新对象上,并执行构造函数中的代码。
  3. this关键字:
    在构造函数内部,this关键字引用的是新创建的对象实例。你可以使用this来设置新对象的属性或方法。
  4. prototype属性:
    每个构造函数都有一个prototype属性,它是一个对象,用于存储所有实例共享的属性和方法。当你创建一个新对象时,这个新对象会继承构造函数的prototype对象上的属性和方法。
  5. 返回值:
    通常,构造函数不返回任何值(或返回this,这是隐式的)。然而,如果构造函数显式地返回了一个非原始值(如对象或数组),那么这个值将替代新创建的对象作为new表达式的返回值。但是,如果返回的是原始值(如numberstringbooleannullundefined),那么新创建的对象仍然会被返回。
  6. 继承:
    JavaScript中的继承通常通过修改原型链或使用ES6中的class语法(它是基于原型链的语法糖)来实现。构造函数可以通过其prototype属性参与原型链,从而允许子类继承父类的属性和方法。

三、简易实现

示例1:

// 假如一个普通函数Person
function Person(name, age) {  
    const obj = {};
    obj.name = name;  
    obj.age = age; 
    obj.__proto__ = Person.prototype
    return obj
}  

const a = Person('a', 20)

image.png

示例2:

// 定义构造函数Person
function Person(name, age) {  
    this.name = name;  
    this.age = age; 
}  

const a = new Person('a', 20)

image.png

四、与普通函数区别

构造函数(Constructor Functions)和普通函数(Regular Functions)主要差异:

  1. 使用 new 关键字:
    • 构造函数通常与 new 关键字一起使用来创建和初始化对象。当使用 new 关键字调用一个函数时,这个函数就被当作构造函数来使用。
    • 普通函数则不需要使用 new 关键字来调用,它们通常用于执行某些操作或返回某个值。
  2. this 的行为:
    • 在构造函数中,this 关键字引用的是通过 new 创建的新对象。构造函数内部通常使用 this 来为新对象添加属性和方法。
    • 在普通函数中,this 的值取决于函数如何被调用。如果函数作为普通函数调用,this 通常指向全局对象(在浏览器中是 window)。但如果函数作为对象的方法被调用,this 将指向调用该方法的对象。此外,还可以使用 Function.prototype.callFunction.prototype.apply 或箭头函数来显式设置 this 的值。
  3. 返回值:
    • 如果构造函数没有显式地返回一个对象,那么 new 表达式将返回新创建的对象。如果构造函数显式地返回了一个非原始值(如对象或数组),那么这个值将替代新创建的对象作为 new 表达式的返回值(但这种情况很少见,通常不建议这样做)。
    • 普通函数可以返回任何类型的值,包括原始值和对象。返回值由函数体内的 return 语句确定。
  4. 命名约定:
    • 虽然JavaScript并没有强制要求构造函数和普通函数有不同的命名方式,但按照惯例,构造函数通常使用大驼峰命名法(PascalCase),即首字母大写的命名方式(例如 PersonCar 等)。
    • 普通函数则可以使用任何有效的命名方式,但通常使用小驼峰命名法(camelCase),即首字母小写的命名方式(例如 calculateSumgreetUser 等)。
  5. 目的:
    • 构造函数的主要目的是创建和初始化对象,为新对象设置属性和方法。
    • 普通函数则用于执行各种任务,如计算、数据处理、逻辑判断等。
  6. 原型链:
    • 构造函数与原型链密切相关。每个构造函数都有一个 prototype 属性,这个属性是一个对象,包含可以由构造函数创建的所有实例共享的属性和方法。通过原型链,我们可以实现继承和其他面向对象的编程模式。
    • 普通函数也可以有原型,但它们的原型通常不用于创建实例共享的属性和方法。
  7. instanceof 操作符:
    • 由于构造函数创建的实例与构造函数之间存在一种特殊的联系,因此我们可以使用 instanceof 操作符来检测一个对象是否由某个构造函数创建
    • 普通函数与它们调用的结果之间不存在这种联系,因此不能使用 instanceof 操作符来检测。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

海南聚广众达电子商务咨询有限公司抖音电商的领航者

在数字经济的浪潮中,电子商务已经成为企业发展的重要引擎。而抖音,这个短视频平台的崛起,更是为电商行业带来了全新的机遇和挑战。海南聚广众达电子商务咨询有限公司,作为抖音电商服务的佼佼者,以其专业的服务、创新的…

Go语言环境安装

Go下载地址 哪个能用用哪个。 https://go.dev/ https://golang.google.cn/(Golang官网的官方镜像) Windows 使用.msi安装包安装 下载msi文件 安装 双击运行go1.22.4.windows-amd64.msi Next 勾选I accept the terms in the License Agreement&…

查看es p12证书文件过期方法

查看证书过期时间: openssl pkcs12 -in elastic-certificates.p12 -nokeys -out elastic-certificates.crt (需要输入证书生成时配置密码) openssl x509 -enddate -noout -in elastic-certificates.crt

CTF实战:从入门到提升

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是尘缘,一个在CSDN分享笔记的博主。📚📚 👉点击这里,就可以查看我的主页啦!👇&#x…

通付盾入选2024中国数字安全综合实力百强

近日,国内数字化产业第三方调研与咨询机构数世咨询正式发布《新质•中国数字安全百强报告(2024)》(以下简称“报告”)。通付盾凭借综合实力,从国内800余家经营数字安全业务的企业中脱颖而出,入选综合实力百强“竞争者”…

AI绘画Stable Diffusion人物背景替换实操教程,让创意无限延伸

大家好,我是画画的小强 Stable Diffusion以其强大的能力可以实现人物背景的更换。本文将带你深入了解如何利用Stable Diffusion中的Inpaint Anything插件快速且精准地实现人物背景的替换,从而让你的图片焕发新生。 前期准备 本文会使用到Inpaint Anyt…

230个大模型招投标大单,前三令人意外

大模型市场争夺白热化,前三的座次每个月都在变。 2024年被认为是大模型的应用落地元年,大模型落地的进展一直备受瞩目,而大模型招投标信息被认为是其中的风向标。最近,数智前线通过中国政府采购网、中国招投标公共服务平台、天眼…

思看科技IPO背后:募资金额下调,在创始人配偶管辖下获得补贴?

近日,思看科技(杭州)股份有限公司(下称“思看科技”)更新提交2023年最新财务资料,IPO审核进程恢复正常。据贝多财经了解,思看科技于2023年6月递交招股书,同年7月历经第一轮问询。 目…

项目maven标志消失,pom文件显示为橙色/橘色标志

背景: 公司开发新的项目,我要拉一下item服务的工程进行开发,等我把代码拉下来发现我idea右侧边栏的maven没了,pox.xml文件也变成了这种橙色/橘色的标志。 分析: 这个是一个不正常的maven项目pom,可能是由于…

Node.js实现短链接(ShortLink):shortid、epxress让URL更简单

文章目录 一、短链接介绍二、插件介绍1、epxress2、shortid 三、实现方案1、安装依赖:2、实现原理 四、示例代码五、测试生产短链接 一、短链接介绍 短链接是指仅包含一个网址的链接形式,通俗一些就是将一个很长很复杂的的网址变成一个简短易记的链接。…

【大数据技术原理与应用(概念、存储、处理、分析与应用)】第1章-大数据概述习题与知识点回顾

文章目录 单选题多选题知识点回顾几次信息化浪潮主要解决什么问题?信息科技为大数据时代提供哪些技术支撑?数据产生方式有哪些变革?大数据的发展历程大数据的四个特点(4V)大数据对思维方式的影响大数据有哪些关键技术&…

Android10 Settings系列(六)Settings中toolbar 的基本流程,和Activity如何关联,这可能是比较详细的分析

一、前言 写在前面:一个快捷栏,音量浮窗快捷进入设置界面,点击左上角返回键拉起设置首页问题引发的思考和解决方法 事情的起因是测试报了一个问题。在Android9的一个设备在点击音量键时,在弹出的弹框中,点击设置图标快速进入音量设置中,点击左上角返回按钮是,退出当前界…

GPT-5智能新纪元的曙光

在美国达特茅斯工程学院周四公布的采访中,OpenAI首席技术官米拉穆拉蒂被问及GPT-5是否会在明年发布,给出了肯定答案并表示将在一年半后发布。穆拉蒂在采访中还把GPT-4到GPT-5的飞跃描述为高中生到博士生的成长。 这一爆炸性的消息,震动了整体…

期货交易中的几种常见心态管理

期货交易通常涉及到风险和收益的权衡,因此参与者的心态可以显著影响他们的决策和最终结果。以下是一些炒期货的常见心态: 1. 利润最大化心态:持有这种心态的投资者不关心风险,只考虑高利润。他们可能会盲目追求高回报&#xff0…

第26课 绘制原理图——原理图布局的调整

概述 我们可以根据需要,对原理图上各个图元的位置进行调整,让整个电路图的布局更加舒服。 拖动图元 只需按住鼠标左键,即可拖拽图元。 旋转图元 在原理图上时选中一个图元,之后按一次空格键,即可将图元逆时针旋转90…

怎么把avi转换成mp4?超好用的四种转换方法介绍!

怎么把avi转换成mp4?AVI,这个曾经风光一时的视频格式,如今却像是时代的遗珠,被现代科技潮流逐渐边缘化,在数字化飞速发展的今天,AVI面临着严重的兼容性问题,由于它诞生于一个较早的时代&#xf…

Hive笔记-4

240618-Hive笔记-4 4.2 Insert 4.2.1 将查询结果插入表中 1) 语法 INSERT (INTO | OVERWRITE) TABLE tablename [PARTITION (partcol1val1,partcol2val2 ...)] select_stamement; 关键字说明: (1) INTO: 将结果追加到目标表 (2) OVERWRITE: 用结果覆盖原有数据 2) 案例…

热敏电阻阻值和ADC采集值的转换(附10K(3950)案例)

解释:电阻阻值的转换 resistance (float)(10000 * adc_value) / (4096 - adc_value);是根据电压分压原理和ADC的转换公式来的。假设温度传感器和一个10k欧姆的电阻串联,两端接5V电源,那么温度传感器的电阻值和输出电压之间有如下关系&#…

Cell强势开启真菌组研究新篇章

人体消化系统中居住着各种各样的微生物,包括细菌、古菌、病毒和真菌。除了肠道细菌外,肠道真菌也是肠道健康微生物群的重要组成部分,过去10多年的微生态研究主要聚焦在细菌/古菌,真菌还属于暗物质,完全没有系统性认识。…

新媒体矩阵系统是什么?怎么搭建矩阵系统?

目录 前言: 一、新媒体矩阵分别是什么? 1、横向矩阵 2、 纵向矩阵 二、新媒体矩阵的作用? 1、多元化发展,吸引目标 2、多平台协同,放大宣传效果 3、多平台运营,分散风险 三、怎么做矩阵系统&…