〖大前端 - 基础入门三大核心之JS篇(53)〗- 构造函数与类

news/2024/5/19 0:43:21 标签: 前端, javascript, 开发语言, 构造函数,
  • 说明:该文属于前端全栈架构白宝书专栏,目前阶段免费如需要项目实战或者是体系化资源,文末名片加V!
  • 作者:哈哥撩编程,十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司担任研发部门CTO。
  • 荣誉:2022年度博客之星Top4、2023年度超级个体得主、谷歌与亚马逊开发者大会特约speaker全栈领域优质创作者

  • 🏆 白宝书系列
    • 🏅 启示录 - 攻城狮的自我修养
    • 🏅 Python全栈白宝书
    • 🏅 ChatGPT实践指南白宝书
    • 🏅 产品思维训练白宝书
    • 🏅 全域运营实战白宝书
    • 🏅 大前端全栈架构白宝书


文章目录

  • ⭐用new操作符调用函数
  • 与实例

前面我们学习了上下文规则,也知道了上下文是由调用函数的方式来决定的,事实上,在面向对象中,不仅仅只有上面学到的那些函数的调用方式,还有一种非常常见的调用函数的方式,就是用操作符new来调用函数。

⭐用new操作符调用函数

现在,我们学习一种新的函数调用方式:new 函数()

你可能知道new操作符和“面向对象”息息相关,但是现在我们先不探讨它的“面向对象”意义,而是先把用new调用函数的执行步骤和它的上下文弄清楚。

用new操作符调用函数的”四步走“:

  1. 函数体内会自动创建出一个空白对象

  2. 函数的上下文(this)会指向这个对象

  3. 函数体内的语句会执行

  4. 函数会自动返回上下文对象,即使函数没有return语句

我们来举个例子详细的说明,下面的代码中用new操作符调用了函数fun()

function fun() {
    this.a = 3;
    this.b = 5;
}

var obj = new fun();   // 使用new操作符调用了函数fun()
console.log(obj);   // 程序的执行结果是怎样的?

根据“四步走”规则,程序执行的步骤是这样的:

image-20230619134719384

所以上述代码执行的结果就是在控制台输出了一个对象:{a: 3, b: 5}:

image-20230619134928054

上面的例子其实是面向对象的基本操作,总结一下就是new操作符来调用函数时,函数会自动创建一个对象并执行函数中的语句来添加属性和方法,最后自动返回这个对象。

与实例

:好比是“蓝图”,只描述对象会拥有哪些属性和方法,但是并不具体指明属性的值

实例:具体的对象,实例一定是看得见摸得着了,非常非常具体的。

“人”就是一个“”,它拥有一些属性和方法,比如身高、体重、性别、能使用工具、能唱歌等。而“人”这个的实例必须是一个具体的人。比如“乔布斯”就是一个“实例”,他用于“人”这个“”的属性和方法,并且能够指明这些属性的值。

现在的程序语言大部分都是“面向对象”的语言,还有“面向过程“语言,而我们现在学习的JavaScript是”基于对象“的语言:

  • Java、C++等是**“面向对象”**(object-oriented,简称oo)语言
  • JavaScript是**“基于对象”**(object-base,简称ob)语言
  • JavaScript中的构造函数可以比于OO语言中的“,写法的确似,但和真正OO语言还是有本质不同,后面再做更详细的介绍。

下面来看一张图:

image-20230619141437058

上图中,People是一个构造函数,我们可以看作是”“,这个”“下面实例化了三个对象:xiaomingxiaoqiangxiaohong,这三个对象拥有同样的属性名和方法,但他们的属性值可能并不相同,但他们的属性值一定是“确定”的。

总结:1、要学会面向对象,一定要正确的理解“”和“实例”;2、JavaScript是“基于对象”语言,它的“构造函数”就相当于”面向对象“中的“


http://www.niftyadmin.cn/n/5259969.html

相关文章

C++ Java 嵌入式选哪个,该走哪个方向?

看一下最近几年的C Java 嵌入式薪资水平 图片来源:牛客2023校招春季与秋季白皮书 总结一下各届平均值,供大家参考,整体上薪资还是能反应一定的供需关系。 浅浅分析下: C领跑,整体波动不大,主要因为岗位较…

vue 刷新页面后 params 参数的丢失问题

页面跳转($router)方式 方式一(刷新页面参数会丢失) 此方法不会在浏览器 url 地址栏中显示传递的参数 this.$router.push({ name: a, params: { name: 张三, age: 18 }}) // 页面跳转this.$route.params // 参数接收 方式二(刷新页面参数不会丢失) 此方法会在浏览器 url 地…

Servlet 的初步学习

前言 咱们最核心的目标是基于tomcat编程, 做出网站来 ~~ 基于tomcat进行网站后端的开发. 网站后端, http服务器,肯定是需要针对http 协议进行一系列操作的. 幸运的是, tomcat,已经把这些http相关的底层操作,封装好了只需要调用tomcat给咱们提供的api即可 Servlet 是什么 Servl…

数据分析基础之《numpy(3)—基本操作》

一、基本操作 1、adarray.方法() 2、np.函数名() 二、生成数组的方法 1、生成0和1的数组 为什么需要生成0和1的数组? 我们需要占用位置,或者生成一个空的数组 (1)ones(shape[, dtype, order]) 生成一组1 shape:形…

探索C++中的常见排序算法

探索C中的常见排序算法 目录 冒泡排序 (Bubble Sort)选择排序 (Selection Sort)插入排序 (Insertion Sort) 冒泡排序 (Bubble Sort) 实现思路: 冒泡排序是一种简单直观的排序算法,它通过不断交换相邻元素的位置来达到排序的目的。算法的基本思想是重…

游戏“由于找不到XINPUT1_3.dll无法继续执行代码”,5种解决方法

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“找不到XINPUT1_3.dll”。这个错误通常发生在运行某些游戏或软件时,它会导致程序无法正常运行。在计算机领域,DLL(Dynamic Link Library)是一…

什么?通过 Prometheus 编写巡检脚本

原文来源: https://tidb.net/blog/894d0118 背景 笔者最近在驻场,发现这里的 tidb 集群是真的多,有将近150套集群。而且集群少则6个节点起步,多则有200多个节点。在这么庞大的集群体量下,巡检就变得非常的繁琐了。…

【内存函数】

目录 memcpy使用和模拟实现memmove使用和模拟实现memset使用memcmp使用 1. memcpy使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num) ; 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存的位置这个函数在遇到…