# 术语
# 一等函数(first-class function)
一等函数是指在编程语言中,函数被视为一种值(或成为对象)的特性。具体来说,一等函数具备以下特点:
- 函数可以被存储在变量中:可以将函数赋值给变量,就像赋值其他类型的值一样;
- 函数可以作为参数传递:可以将函数作为参数传递给其他函数;
- 函数可以作为返回值返回:函数可以作为另一个函数的返回值。
一等函数的概念是函数式编程的重要特性之一。它使得函数可以像其他数据类型一样灵活地操作,可以作为数据的一部分进行传递和处理。这种特性使得函数可以用来构建更加灵活和可复用的代码结构。
在支持一等函数的编程语言中,可以使用函数来实现回调机制、高阶函数、函数组合等功能。 一些支持一等函数的编程语言包括JavaScript、Python、Ruby等。这些语言中的函数可以像其他数据类型一样自由地进行操作,使得编程变得更加灵活和强大。
# 基于原型(Prototype-based)
基于原型(Prototype-based)
是一种面向对象编程(OOP)的范式,与基于类(Class-based)的OOP不同。
在基于原型的编程中,每个对象都有一个原型(Prototype),它定义了对象的基本特征和行为。对象可以通过访问其原型来继承属性和方法。如果一个对象访问某个属性或方法时找不到,它会继续在其原型上查找,直到找到该属性或方法或者达到原型链的末尾。
原型链是由对象的原型组成的链式结构,它允许对象通过继承和委托的方式共享和扩展行为。
虽然JavaScript
是一门基于原型的语言,但在ES6
中引入了class
关键字,以提供一种类似于传统类的语法和语义。
在JavaScript
中,class
关键字提供了一种声明类的语法。类可以包含构造函数
、实例方法
、静态方法
和getter/setter
等成员。通过使用class
关键字,我们可以更直观地定义和组织代码,并且可以使用类的实例化
、继承
和封装
等面向对象的概念。
尽管class
关键字在语法上看起来像是定义类,但实际上它仍然是基于原型的。在JavaScript
中,使用class
定义的类本质上是通过构造函数
和原型
来实现的。类的构造函数定义对象的初始状态和行为,而类的方法则被添加到构造函数的原型上,从而实现了方法的共享和继承。
使用class
关键字的好处是它提供了一种更加清晰和直观的语法,使得面向对象编程更易于理解和使用。它也使得JavaScript
与其他基于类的语言更加接近,使那些熟悉类和对象的开发者更容易上手JavaScript
。
基于原型和基于类是两种不同的面向对象编程范式。他们在对象创建、继承和组织代码方面有一些区别:
- 对象创建方式:
- 基于原型:对象是通过克隆现有对象并在其基础上进行修改和扩展来创建。可以使用
Object.create()
方法创建一个指定原型的新对象,或者通过构造函数和new
关键字来创建对象。 - 基于类:对象是通过实例化类来创建。类是对象的模板,通过使用
class
关键字定义类,然后使用new
关键字实例化类来创建对象。
- 基于原型:对象是通过克隆现有对象并在其基础上进行修改和扩展来创建。可以使用
- 继承方式:
- 基于原型:对象通过原型链来继承属性和方法。每个对象有一个原型,如果对象访问某个属性或方法时找不到,它会在原型链上继续查找,直到找到该属性或方法或者到达原型链的末尾。
- 基于类:继承是通过类之间的关系来实现。子类可以继承父类的属性和方法,并可以添加自己的属性和方法。通常使用关键字
extends
来指定父类,并使用super
来调用父类的构造函数和方法。
- 代码组织方式:
- 基于原型:基于原型的编程通常更加灵活,对象的行为可以动态地修改和扩展。对象之间的关系通过原型链来建立,可以在运行时动态地添加、修改和删除属性和方法。
- 基于类:基于类的编程提供了一种更加结构化和静态的方式来组织代码。类定义了对象的结构和行为,并且在编译时就确定了对象的属性和方法。
# 立即调用函数表达式(IIFE-Immediately-Invoked Function Expression)
IIFE
是一个在定义时就会立即执行的JavaScript函数。它是一种设计模式,也被称作自执行匿名函数
,主要包含两部分:
- 一个具有词法作用域的匿名函数,并且用圆括号运算符闭合起来,不但阻止外界访问
IIFE
中的变量,且不会污染全局作用域; - 一个立即执行函数表达式。
(function () {
// ...
})()
(() => {
// ...
})()
(async () => {
// ...
})()
2
3
4
5
6
7
8
9
10
11