do not rely on $.isFunction