JS语言是不是面向对象的
我要写两篇文章。第一篇,阐述JS语言是不是面向对象的,和JS是否支持工程模块化;第二篇,讲一种阅读React源码项目的技术。
阐述的步骤, 1 为什么要面向对象, 2 面向对象的标准特征是什么, 3 JS有没有,以及如何实现这个特征。
同样,为啥要模块化,什么是模块化,以及JS如何做的
#JS语言是不是面向对象 1 任何语言都是用来构造具有计算功能的【程序】,有【构造程序】的功能,但不一定要支持OO构造法; 2 编程语言具有【构造程序】的属性,这个特性主要取决于语言的设计,设计【针对何种程序】,例如针对 科学程序的 C语言就不支持OO构造法; 3 JS针对面向个人用户的交互应用设计的, 被公认是支持OO构造法,只是OO理论本身的不成熟,JS在何种标准和程度上支持OO,没有比较严格的定论; 4 我认为OO构造法的根本,第一,是支持专业计算功能的封装,就是语言支持 【对象】的构件;第二,语言支持类继承,能对相似对象进行抽象,归纳得个通用的对象,就是语言【抽象基类】; 5 【对象】的计算功能封装,是软件工程的协作基础;【抽象基类】则在分割大型程序功能,增加一层技术; 6 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/engineering…