JavaScript中自执行函数(IIFE)与类(Class)

2024-09-04 19:36

本文主要是介绍JavaScript中自执行函数(IIFE)与类(Class),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

自执行函数(IIFE)

  • 定义: 自执行函数(IIFE, Immediately Invoked Function Expression)是一种函数表达式,它在定义后立即执行。它通常用于创建一个新的作用域来避免变量污染全局作用域。
  • 语法
(function() {// 这里是函数体console.log('I am an IIFE!');
})();
  • 示例
// 传统的 IIFE
(function() {var x = 'Hello';console.log(x); // 输出 'Hello'
})();// 外部无法访问 x
console.log(typeof x); // 输出 'undefined'

IIFE 返回一个对象,其中包含自定义函数,将自定义函数暴露到外部作用域中。这可以通过 IIFE 返回一个对象来实现

const module = (function() {// 内部函数function privateFunction() {console.log('This is a private function.');}// 公共函数function publicFunction() {console.log('This is a public function.');}// 返回一个对象,将公共函数暴露到外部return {publicFunction: publicFunction};
})();// 调用暴露的公共函数
module.publicFunction(); // 输出: This is a public function.// 尝试调用私有函数会失败
// module.privateFunction(); // TypeError: module.privateFunction is not a function

自执行函数(IIFE)可以用来模拟类中的构造函数。示例如下:

const MyClass = (function() {// 构造函数function createInstance(name) {return {name: name,greet: function() {console.log(`Hello, my name is ${this.name}.`);}};}// 返回构造函数return createInstance;
})();// 创建实例
const instance = MyClass('Alice');
instance.greet(); // 输出: Hello, my name is Alice.

类(class)

  • 定义: class 语法是 ECMAScript 6(ES6)引入的,提供了一种更简单和直观的方式来创建和管理对象的构造函数和原型方法。它是 JavaScript 的面向对象编程(OOP)的一部分。
  • 语法
class Person {constructor(name, age) {this.name = name;this.age = age;}greet() {console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);}
}// 创建一个 Person 实例
const person1 = new Person('Alice', 30);
person1.greet(); // 输出 'Hello, my name is Alice and I am 30 years old.'
  • 特点
    构造函数: constructor 方法是创建对象时自动调用的方法。
    原型方法: 方法定义在类的内部,可以被所有实例共享。
    继承: 可以通过 extends 关键字创建子类,继承父类的属性和方法。
  • 示例
class Animal {constructor(name) {this.name = name;}speak() {console.log(`${this.name} makes a noise.`);}
}class Dog extends Animal {speak() {console.log(`${this.name} barks.`);}
}const dog = new Dog('Rover');
dog.speak(); // 输出 'Rover barks.'

对比

IIFE: 主要用于创建局部作用域,保护变量不被外部访问,常用于模块化代码。
class: 主要用于面向对象编程,提供了一种结构化的方式来创建对象和管理继承关系。
自执行函数可以模拟类

  • 模拟类及其构造函数
const MyClass = (function() {// 构造函数function MyClass(name) {this.name = name;}// 原型方法MyClass.prototype.greet = function() {console.log(`Hello, my name is ${this.name}.`);};// 返回构造函数return MyClass;
})();// 创建实例
const instance = new MyClass('Alice');
instance.greet(); // 输出: Hello, my name is Alice.

这篇关于JavaScript中自执行函数(IIFE)与类(Class)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136833

相关文章

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段

在 Spring Boot 中连接 MySQL 数据库的详细步骤

《在SpringBoot中连接MySQL数据库的详细步骤》本文介绍了SpringBoot连接MySQL数据库的流程,添加依赖、配置连接信息、创建实体类与仓库接口,通过自动配置实现数据库操作,... 目录一、添加依赖二、配置数据库连接三、创建实体类四、创建仓库接口五、创建服务类六、创建控制器七、运行应用程序八

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

深入解析Java NIO在高并发场景下的性能优化实践指南

《深入解析JavaNIO在高并发场景下的性能优化实践指南》随着互联网业务不断演进,对高并发、低延时网络服务的需求日益增长,本文将深入解析JavaNIO在高并发场景下的性能优化方法,希望对大家有所帮助... 目录简介一、技术背景与应用场景二、核心原理深入分析2.1 Selector多路复用2.2 Buffer

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决

SpringBoot实现虚拟线程的方案

《SpringBoot实现虚拟线程的方案》Java19引入虚拟线程,本文就来介绍一下SpringBoot实现虚拟线程的方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录什么是虚拟线程虚拟线程和普通线程的区别SpringBoot使用虚拟线程配置@Async性能对比H

javaSE类和对象进阶用法举例详解

《javaSE类和对象进阶用法举例详解》JavaSE的面向对象编程是软件开发中的基石,它通过类和对象的概念,实现了代码的模块化、可复用性和灵活性,:本文主要介绍javaSE类和对象进阶用法的相关资... 目录前言一、封装1.访问限定符2.包2.1包的概念2.2导入包2.3自定义包2.4常见的包二、stati

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底