bem / bem-core

BEM Core Library
https://ru.bem.info/technologies/classic/i-bem/
Other
275 stars 94 forks source link

function: Incorrect `isFunction` behaviour for async functions #1575

Closed sbmaxx closed 6 years ago

sbmaxx commented 6 years ago
modules.define('functions', function(provide) {
var toStr = Object.prototype.toString;
provide({
    isFunction : function(obj) {
        return toStr.call(obj) === '[object Function]';
    },
    noop : function() {}
});
});

Для асинхронных функций значение будет — [object AsyncFunction]. Это ломает все подписки на события, и наверняка что-то ещё

gwer commented 6 years ago

Есть ещё [object GeneratorFunction] и [object Proxy]. Но проксироваться может не только функция, но и объект.

А typeof отдаёт function для обычных функций, для асинхронных, для генераторов и для прокси над функцией.