严格模式通过强化执行约束规范原型操作:强制 new 调用构造函数、禁止静默覆盖不可配置属性、禁用 with 和 arguments 绑定,并使 class 声明自动启用严格模式,提升原型链安全性与可维护性。

原型对象在严格模式下本身没有新增定义语法,但严格模式通过强化执行约束,倒逼开发者采用更规范、更安全的原型操作方式。关键不在于“怎么写 prototype”,而在于“哪些写法会被拒绝”——从而自然筛选出可靠模式。
必须显式声明构造函数并用 new 调用
严格模式下,若直接调用构造函数(如 Person() 而非 new Person()),函数内 this 为 undefined,对 this.name = 'Alice' 的赋值会立即报 TypeError。这强制你:
- 构造函数名首字母大写(约定,非强制)
- 始终用 new 实例化,确保原型链正确建立(即新对象的 __proto__ 指向 Person.prototype)
- 避免因遗漏 new 导致属性意外挂到全局或静默失败
向 prototype 添加方法/属性需避免静默覆盖
严格模式禁止对不可配置属性进行删除或重写。例如内置原型上的 Object.prototype.toString 是 configurable: false 的:
- 非严格模式:delete Object.prototype.toString 返回 false,但不报错
- 严格模式:delete Object.prototype.toString 直接抛出 TypeError
这意味着你在自定义构造函数时,也应避免随意覆盖父级原型上已设为不可配置的属性。添加自有方法推荐写法:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
禁止使用 with 和 arguments 绑定,保障原型方法复用安全
当在原型上定义方法(如 Parent.prototype.init),并被子类借用时(Parent.prototype.init.call(child, ...)),严格模式的作用很实在:
- arguments 不再与形参双向绑定:修改形参不影响 arguments[0],避免参数逻辑错乱
- 禁用 with:防止临时作用域劫持原型链查找(如 with(obj) { toString(); } 原本可能跳过 Object.prototype.toString)
这两点让原型方法在继承、借用、call/apply 场景中行为稳定,不因上下文变化而意外改变执行路径。
类声明自动启用严格模式,推荐作为原型定义的现代替代
ES6+ 的 class 语法本质仍是基于原型,但它默认启用严格模式,且从设计上规避了常见陷阱:
- 类体内部无法省略 new(MyClass() 直接报 TypeError)
- 不能重复声明同名方法或属性(constructor 重复会 SyntaxError)
- 静态方法、实例方法、getter/setter 全部定义在对应原型位置,结构清晰
例如:
class Animal {constructor(name) { this.name = name; }
say() { return `I'm ${this.name}`; }
}
// Animal.prototype.say 已自动定义,且受严格模式保护
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










