知识卡片
伪类遮蔽原型
内容
用 new+构造器函数模拟类(伪类写法),本质仍是函数自带 prototype、new 时创建继承该原型的新对象——这套语法容易让人误以为在用类,掩盖对象直接继承对象的原型本质;忘记写 new 会让 this 错误绑定到全局对象。现代 class 语法糖建立在同一套原型模型上,问题不在是否用类式写法,而在是否理解底层原型机制。发散:语法外观与模型不一致时,更容易写出看似熟悉实则未被理解的代码。
参考来源
- 位置:《JavaScript语言精粹(修订版)》第5章《继承 Inheritance》"伪类"一节
- 结论依据:原文说明伪类模式"插入了一个多余的间接层:通过构造器函数产生对象",并评价"'伪类'形式可以给不熟悉JavaScript的程序员提供便利,但它也隐藏了该语言的真实的本质。借鉴类的表示法可能误导程序员去编写过于深入与复杂的层次结构";同时指出忘记 new 会把 this 错误绑定到全局对象。据此保留"类式语法可能掩盖原型本质"的判断,但弱化为"容易掩盖"而非"必然遮蔽",并说明现代 class 是标准语法、问题核心在于理解而非语法本身。
- 原始内容:它的某些复杂的语法看起来就像那些基于类的语言,这些语法问题掩盖了它的原型机制。它不直接让对象从其他对象继承,反而插入了一个多余的间接层:通过构造器函数产生对象……"伪类"形式可以给不熟悉JavaScript的程序员提供便利,但它也隐藏了该语言的真实的本质。