鸭式辨型与JS对象的类判断

1,834 阅读1分钟

定义和中心思想

鸭式辨型来自于

"像鸭子一样走路并且嘎嘎叫的就叫鸭子。" -- James Whitecomb Riley

通过制定规则来判定对象是否实现这个接口。
尽量规避“对象的类是什么”的这些问题,而是关注“对象能做什么”。

JS对象的类获取实例

数据类型判断见一份炒饭-lodash 是如何做类型检测的
对象的类获取实例

function className(object, defaultName) {
    var nameFromToStringRegex = /^function\s?([^\s(]*)/;
    var result = "";
    if(typeof object === 'null' )
       return 'Null';
    if(typeof object === 'undefined' )
       return 'Undefined';
    if (typeof object === 'function') {
        result = object.name || object.toString().match(nameFromToStringRegex)[1];
    } else if (typeof object.constructor === 'function') {
        result = className(object.constructor, defaultName);
    }
    return result || defaultName;
}

参考:
掘金-一份炒饭-lodash 是如何做类型检测的
KeiferGu的博客-在Javascript中获取class的类型名的方法
Vinson-sheep-Javascript类型的判断