Actually, that object could hack mine as well so, this is my definitive solution.
var isFunction = (function(toString){ var s = toString.call(toString), u = typeof u; return typeof this.alert === "object" ? function(f){ return s === toString.call(f) || (!!f && typeof f.toString == u && typeof f.valueOf == u && /^\s*\bfunction\b/.test(f)); }: function(f){ return s === toString.call(f); } ; })(Object.prototype.toString); Regards On Wed, Aug 5, 2009 at 9:27 AM, Andrea Giammarchi < andrea.giammar...@gmail.com> wrote: > Sorry, forgot an argument ... > > var isFunction = (function(toString){ > var s = toString.call(toString), > u = typeof u; > return typeof this.alert === "object" ? > function(f){ > return s === toString.call(f) || (!!f && typeof f.toString == u > && /^\s*\bfunction\b/.test(f)); > }: > function(f){ > return s === toString.call(f); > } > ; > })(Object.prototype.toString); > > LOL, regards > > > On Wed, Aug 5, 2009 at 9:25 AM, Andrea Giammarchi < > andrea.giammar...@gmail.com> wrote: > >> var o = {valueOf:function(){return "[function]"},toString:null}; >> >> alert(isFunction(o)); // true in IE >> >> DBJ what is the problem, really? I wrote two options and both do what you >> are trying to di with hundreds of tests ... is it that difficult? >> >> var isFunction = (function(toString){ >> var s = toString.call(toString), >> u = typeof u; >> return typeof this.alert === "object" ? >> function(f){ >> return s === toString.call(f) || (!!f && typeof f.toString == >> u && /^\s*\bfunction\b/.test(f)); >> }: >> function(){ >> return s === toString.call(f); >> } >> ; >> })(Object.prototype.toString); >> >> Regards >> >> >> >> >> On Wed, Aug 5, 2009 at 8:57 AM, DBJDBJ <dbj...@gmail.com> wrote: >> >>> >>> V.5 ?! >>> Here is the (hopefully) proper verion : >>> >>> // GPL (c) 2009 by dbj.org >>> function isFunction (x) { >>> switch(typeof x) { >>> case "function" : return true ; >>> case "object" : >>> if ( "function" !== typeof x.toString ) >>> return (x + "").match(/function/) !== >>> null ; >>> else >>> return Object.prototype.toString.call >>> (x) === "[object Function]" ; >>> break ; >>> default : return false ; >>> } >>> } >>> >>> // this was breaking the previous version >>> window.test = { >>> toString: function() { return '[function]'; } >>> }; >>> >>> isFunction( test ) >>> /* >>> false >>> */ >>> isFunction( isFunction ) >>> /* >>> true >>> */ >>> isFunction( confirm ) >>> /* >>> true >>> */ >>> >>> >>> >>> >> > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "jQuery Development" group. To post to this group, send email to jquery-dev@googlegroups.com To unsubscribe from this group, send email to jquery-dev+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/jquery-dev?hl=en -~----------~----~----~----~------~----~------~--~---