文件名称:用鸭子类型进行接口检查-清华大学计算机考研经验贴.
文件大小:8.5MB
文件格式:PDF
更新时间:2024-07-15 10:06:40
javasc
21.4 用鸭子类型进行接口检查 在 1.2 节中,我们已经了解过鸭子类型的概念: “如果它走起路来像鸭子,叫起来也是鸭子,那么它就是鸭子。” 鸭子类型是动态类型语言面向对象设计中的一个重要概念。利用鸭子类型的思想,不必借助 超类型的帮助,就能在动态类型语言中轻松地实现本章提到的设计原则:面向接口编程,而不是 面向实现编程。比如,一个对象如果有 push 和 pop 方法,并且提供了正确的实现,它就能被当作 栈来使用;一个对象如果有 length 属性,也可以依照下标来存取属性,这个对象就可以被当作 数组来使用。如果两个对象拥有相同的方法,则有很大的可能性它们可以被相互替换使用。 在 Object.prototype.toString.call( [] ) === '[object Array]' 被发现之前,我们经常用鸭子 类型的思想来判断一个对象是否是一个数组,代码如下: var isArray = function( obj ){ return obj && typeof obj === 'object' && typeof obj.length === 'number' && typeof obj.splice === 'function' }; 当然在 JavaScript 开发中,总是进行接口检查是不明智的,也是没有必要的,毕竟现在还找 不到一种好用并且通用的方式来模拟接口检查,跟业务逻辑无关的接口检查也会让很多 JavaScript 程序员觉得不值得和不习惯。在 Ross Harmes 和 Dustin Diaz 合著的 Pro JavaScript Design Pattrns 一书中,提供了一种根据鸭子类型思想模拟接口检查的方法,但这种基于双重循环的检查 方法并不是很实用,而且只能检查对象的某个属性是否属于 Function 类型。 图灵社区会员 balabala233 专享 尊重版权