知识卡片

鸭式辩型关注能做什么而非是什么

专业/工作 · 417

内容

“像鸭子一样走路、游泳、嘎嘎叫的鸟就是鸭子”——鸭式辩型主张判断一个对象是否可以在某处使用,依据不是它由哪个类/构造函数创建,而是它当下实际具备哪些方法和行为。这在JavaScript里天然成立,因为instanceof、constructor属性这些”查户口”式的类型检测手段本身就脆弱(多执行上下文里同名构造函数互不相等、原型可被中途替换),与其依赖这些不可靠的身份证明,不如直接假设或检查对象具备所需的方法就直接使用它。这也解释了为什么[[原型才是类的真正标识]]这件事在实践中重要性有限:真正决定一个对象能不能被某段代码接纳的,从来不是它的血统证明,而是它当场能不能应答所需要的那几个方法调用。

参考来源

《JavaScript权威指南(原书第6版)》第9章《类和模块》