Class方法默认挂载原型、不可枚举、强制严格模式且必须通过实例调用;普通函数需手动挂prototype、默认可枚举、非严格模式下this易出错、可直接执行。

Class 方法定义和普通函数在 JavaScript 中看起来相似,但行为、作用域、调用方式和底层机制差异明显。关键不是“能不能写”,而是“怎么用、在哪用、为什么这样设计”。
方法默认挂载在原型上,无需手动操作 prototype
Class 内部定义的实例方法(如 greet())会自动添加到类的 prototype 上,所有实例共享该方法,节省内存。
- class 写法:直接写在花括号里,不加 function 关键字,也不用 Person.prototype.greet = ...
- 普通函数构造器:必须显式写 Person.prototype.greet = function() {...},漏写就变成实例私有方法(每次 new 都新建一份)
Class 方法默认不可枚举,普通函数挂到 prototype 后默认可枚举
这是容易被忽略的细节:Class 定义的方法在遍历时(比如 for...in 或 Object.keys())不会出现;而手动挂到 prototype 上的函数默认是可枚举的。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 这意味着 Class 更贴近“真正的方法”语义——它属于类型接口,不是对象自身的属性
- 如果需要兼容旧逻辑或调试时看到方法,得用 Object.getOwnPropertyNames() 查看原型链
Class 方法自动运行在严格模式下,普通函数不一定
无论脚本是否开启严格模式,Class 内部的所有代码(包括 constructor 和实例方法)都强制启用严格模式。
立即学习“Java免费学习笔记(深入)”;
- 好处:避免常见错误,比如给只读属性赋值、使用未声明变量、this 指向更可靠
- 普通函数若没加 "use strict",this 在非 new 调用时可能指向全局对象(如 window),容易引发隐蔽 bug
不能直接调用 Class 方法,普通函数可以随意执行
Class 中定义的实例方法必须通过实例调用(obj.method()),不能脱离对象上下文运行;而普通函数本身就是独立可执行单元。
- 例如:person.greet() ✅,但 person.constructor.greet() ❌(因为 greet 不是 constructor 的属性)
- 普通函数如 function sayHi() { console.log('hi'); } 可以随时 sayHi(),也能作为回调、传参、赋值给变量

















