typeof fn === 'function'; // Some things like 
document.createElement('object'); return wonky results
fn instanceof Function; // Breaks across iFrames
toString.call(fn) === "[object Function]"; // Works the same across 
iFrames and returns more reliable results

~Daniel Friesen (Dantman, Nadir-Seen-Fire) [http://daniel.friesen.name]

Andrea Giammarchi wrote:
> About isFunction
>
> I lost the point where toString.call(obj) === "[object Function]" was 
> introduced instead of obj instanceof function
>
> I understand differences in IE so I wonder if two distinct callbacks 
> could solve the odyssey:
>
>     isFunction: function( obj ) {
>         return obj instanceof Function;
>     },
>
>     isDOMFunction: toString.call(window.alert) === "[object Function]" ?
>         function( obj ) {
>             return toString.call(obj) === "[object Function]";
>         }:
>         // IE only and only until standard native function manifest
>         function( obj ){
>             return !!obj && typeof obj.toString === "undefined" && 
> /^\s*\bfunction\b/.test(obj);
>         }
>     ,
>
> In this way we could consider that in every browser, and when 
> call/apply are supported, isFunction(fn) will guarantee call/apply 
> while a DOMFunction could require a try catch or a different behavior 
> for IE
>
> switch(true){
>     case $.isFunction(fn): return fn.call(what, ever);
>     case $.isDOMFunction(fn): what.push.call(what, toArray(fn(ever))); 
> return what;
>     default: throw new Error("what tf?");
> }
>
> ... or maybe not?
> Regards
>
>
>
> On Sun, Jul 26, 2009 at 4:09 PM, Andrea Giammarchi 
> <andrea.giammar...@gmail.com <mailto:andrea.giammar...@gmail.com>> wrote:
>
>     I usually encapsulate toString from Object.prototype and if
>     somebody breaks the rule it means we cannot trust anything
>     included typeof. So, in few words, nobody has intersts into break
>     this rule, imho.
>
>>     On Jul 26, 2009 8:07 AM, "DBJDBJ" <dbj...@gmail.com
>>     <mailto:dbj...@gmail.com>> wrote:
>>
>>
>>     Also, IMHO this yields high level of encapsulation of an important
>>     mechanism.
>>     Which is a good thing.
>>     And it is a fraction of a micro second slower then
>>
>>     Object.prototype.toString.call(x) === "[object Object]"
>>
>>     but it is more compact ...
>>
>>     In any case we are entering the subjective judgement phase, so I
>>     think
>>     we should stop here and leave it to jQuery team to use this or not...
>>
>>     --DBJ On Jul 26, 12:09 am, Andrea Giammarchi
>>     <andrea.giammar...@gmail.com
>>     <mailto:andrea.giammar...@gmail.com>> wrote:
>>
>>     > I miss the point about regexp usage ... please tell me the
>>     difference (in a > real scenario) betwe...
>>
>>     > On Sat, Jul 25, 2009 at 1:38 PM, DBJDBJ <dbj...@gmail.com
>>     <mailto:dbj...@gmail.com>> wrote: > > > This indeed woks :  functi...
>>
>
>
> >

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to