JS语言是不是面向对象的?(一)

我计划要写两篇文章。第一篇,阐述JS语言是不是面向对象的,和JS是否支持工程模块化;第二篇,讲一种阅读React源码项目的技术

第一篇,阐述的步骤

  • 1 为什么要面向对象,
  • 2 面向对象的标准特征是什么,
  • 3 JS有没有,以及如何实现这个特征。

同样,

  • 1 为啥要模块化,
  • 2 什么是模块化,
  • 3 以及JS如何做的

JS语言是不是面向对象的?

1 任何语言都是用来构造具有计算功能的【程序】,有【构造程序】的功能,但不一定要支持OO构造法;

2 编程语言具有【构造程序】的工具属性或特性,这个工具特性主要取决于语言的设计,设计【针对何种程序】,例如针对 底层系统程序的 C语言就不支持OO构造法;

3 JS针对开发面向个人用户的交互应用而设计的,这是一种事务处理集中型程序,相对于科学计算程序;

4 事务处理集中型程序规模大,代码重复率很高,所以JS被公认是支持OO构造法,只是OO理论本身的不成熟,JS在何种标准和程度上支持OO,没有比较严格的定论;

5 我认为OO构造法的根本,第一,是支持【专业计算功能】的封装,就是语言支持 【对象】的构件;第二,语言支持类继承等,能对相似对象(行为)进行抽象,归纳得个通用的对象,就是语言【抽象基类】;

6 【对象】的计算功能封装,是软件工程的协作基础;【抽象基类】则在分割大型程序功能,增加一层技术;

7 JS灵活的对象技术,和特殊的原型继承,完全满足以上两个标准;

JS是否支持工程模块化?

1 JS 支持OO构造法,程序可以由一个个的【对象】组成,对象本身就具有【模块】特征;然,【对象】只是功能开发层面的概念,不是工程协作层面的概念;

2 程序的功能单元——【对象】是逻辑的,而不是物理的,【工程模块】应该具有物理性,方便工程协作,包括项目内分工,和社区内分享;

3 JS 有物理的.js文件,然不规定.js的形式,.js文件内容是任意的,所以JS语言(至少ES6前)本身并没有模块化功能

4 JS 应用程序规模的增长,导致了模块化任务的需要,前ES6的JS,社区也用了多种基础技术实现了工程模块化(一种技术他用的技巧);

5 例如,使用对象技术,实现 名字空间模式,和模块模式;

6 还有一些业界实践模块化标准(非语言标准),例如CommonJS

7 ES Module

### 程序模块,与程序功能对象

### 模块的形式

模块就是为了提供计算功能的,所以模块必有对外公开的接口(export);然,模块可能有基础依赖,所以可选的有引入依赖(import);

### ES6 module

The ES6 module standard has two parts:

Declarative syntax (for importing and exporting)

Programmatic loader API: to configure how modules are loaded and to conditionally load modules

### 所谓 模块系统

早前的研究《JavaScript程序模块化及模块系统

裸男
Nakeman.cn 2023 Build by Gatsby and Tailwind, Deploy on Netlify.