JavaScript 类是特殊函数吗?Python背景开发者的JS类与函数、对象关系疑问
认知正误判断(基于JavaScript运行环境)
你出现认知偏差的核心原因是将Python的OOP实现经验套用到了JavaScript中,两种语言的类底层实现逻辑存在本质差异,以下逐个分析:
- 第一条认知「OOP中函数是对象」:仅在支持一等函数的OOP语言中成立,你熟悉的Python、正在学习的JavaScript都符合该规则:函数可以拥有自定义属性、可以作为参数传递、可以作为返回值,本质就是可调用的对象。但该规则并非所有OOP语言的通用标准,比如C++、Java的普通函数就不属于对象范畴。
- 第二条认知「类并不是函数」:在JavaScript语境下完全错误,MDN的表述没有问题。JS的class本质是构造函数的语法糖,你可以执行
typeof class Test {}验证,返回结果就是function。类和普通函数的定义逻辑完全对齐,支持声明、表达式两种写法,本质就是内置了原型链自动处理逻辑的特殊函数。你这条认知来自Python的使用经验,Python的类是type类型的实例,和函数属于完全不同的类型,两者实现逻辑存在差异。 - 第三条认知「不确定类本身是否也是对象」:在JavaScript语境下,类本身就是对象。因为JS中函数本身就是对象,作为特殊函数的类自然也属于对象,你可以直接给类本身挂载自定义属性、方法,操作逻辑和普通对象完全一致。
你可以运行这段代码快速验证上述结论:
// 验证类是函数 class Person {} console.log(typeof Person); // 输出 'function' // 验证类是对象 Person.version = '1.0.0'; console.log(Person.version); // 输出 '1.0.0'
内容的提问来源于stack exchange,提问作者Omar AlHadidi
相关产品推荐
相关产品推荐

