secrets of the javascript Ninja(Function Type)(javascript忍者的秘密)

大多数情况下,typeof就可以完成检查函数类型的工作,例如:

function ninja(){}
alert(typeof ninja); 

但是根据浏览器的不同,我们可以发现以下集中情况

  1. 在firefox2和firefox3中,如果检测一个<object/>类型的元素,将会检测出来是一个function
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>无标题文档</title>
    <mce:script type="text/javascript"><!--
    window.onload=function(){
    var o=document.getElementById("doc_html");
    alert(typeof o);
    }
    // --></mce:script>
    </head>
    <body>
    <object id="doc_html" name="doc_html" style="LEFT: 0px; TOP: 0px" data=" gledit.htm" width=530 height=320 type=text/x-scriptlet VIEWASTEXT></object>
    </body>
    </html> 
  3. firefox2正则表达式会被认为是一个function;但是在firefox3中会被认为是object
  4. IE6和IE7中一些dom元素的方法会被认为一个object
    //typeof /test/=='function'
  5. safari3中认为NodeList为function如:typeof document.body.childNodes =="function"

纵观以上所有情况,我们可以写出一个通用的函数来检测某个值是否是函数

 

function isFunction( fn ) {
return !!fn && !fn.nodeName && fn.constructor != String &&
fn.constructor != RegExp && fn.constructor != Array &&
/function/i.test( fn + "" );

时间: 2024-11-06 07:33:33

secrets of the javascript Ninja(Function Type)(javascript忍者的秘密)的相关文章

secrets of the javascript Ninja (Function Prototypes)(javascript忍者的秘密)

       函数原型有很多用途,比如可以用来向一个函数实例上添加一些属性,但是它的一个最主要用途是使JavaScript能够以面向对象的方式编程. 实例化和原型(Instantiation 和 prototypes) 所有函数默认的都会有一个含有空对象的prototype属性,它的这个特性只有在实例化后才会有用,为了能够理解它的这种特性是多么的重要,需要知道一个重要的原则:函数具有双重功能,它可以作为一个平常的函数,也可以作为一个类. 我们可以通过下面一个小例子来看看如何使用prototype

javascript中$(function() {});写与不写有哪些区别_javascript技巧

javascript中$(function() {....}) 是 jQuery 中的经典用法,等同于 $(document).ready(function() {....}),即在页面加载完成后才执行某个函数,如果函数中要操作 DOM,在页面加载完成后再执行会更安全,所以在使用 jQuery 时这样的写法很常见. $(document).ready() 里的代码是在页面内容都加载完才执行的,如果把代码直接写到script标签里,当页面加载完这个script标签就会执行里边的代码了,此时如果你标

JavaScript使用function定义对象并调用的方法_javascript技巧

本文实例讲述了JavaScript使用function定义对象并调用的方法.分享给大家供大家参考.具体分析如下: JS中你可以通过函数的方式定义对象,下面的JS代码定义了一个movie的函数对象,然后通过new的方法声明对象,调用起来也非常简单. <script type="text/javascript"> function movie(title, director) { this.title = title; this.director = director; } v

JavaScript获取function所有参数名的方法_javascript技巧

我写了一个 JavaScript函数来解析函数的参数名称, 代码如下: function getArgs(func) { // 先用正则匹配,取得符合参数模式的字符串. // 第一个分组是这个: ([^)]*) 非右括号的任意字符 var args = func.toString().match(/function\s.*?\(([^)]*)\)/)[1]; // 用逗号来分隔参数(arguments string). return args.split(",").map(functi

谈谈JavaScript中function多重理解_javascript技巧

JavaScript 中的 function 有多重意义.它可能是一个构造器(constructor),承担起对象模板的作用: 可能是对象的方法(method),负责向对象发送消息.还可能是函数,没错是函数,和对象没有任何关系独立存在的可以被调用的函数. 由于语言设计者的妥协,在 JavaScript 加入了一些 class 相关的特性,以使 JavaScript 看起来确实象 Java,可以 "面向对象".虽然 JavaScript 添加了 new 和 this, 但却没有 clas

Javascript使用function创建类的两种方法(推荐)_javascript技巧

1.使用function类 //myFunction.js var CMyFunc=function() { //类的公共方法,供外部调用 this.Func1=function() { var i=0; return i; } this.Func2=function() { _privateFunc(); } //类中的私有方法,供公共方法调用 function _privateFunc() { return 0; ] } CMyFunc myFunc=new CMyFunc(); 使用:其它

javascript中Function类型详解_javascript技巧

Function 类型 function类型,毋庸置疑是js中相当重要的一个玩意. 1.这玩意首先是一个对象,也就是说它是一个引用类型.陈述:一听说是对象,是不是很有一种它的基类是object对象错觉感,No, 它和object是独立的2个东西.当你typeof function 时,返回的是 funciton 并非 object 2.每个函数都是 Function 对象的一个实例,它与其他引用对象一样具有属性和方法.由于它是对象所以函数名是指向函数对象的指针 关于函数的声明的语法支持: <sc

JavaScript中Function函数与Object对象的关系_javascript技巧

Function是javascript里最常用的一个概念,javascript里的function是最容易入手的一个功能,但它也是javascript最难理解最难掌握的一个概念. 今天我们来尝试理解Function和Object.因为这个里面有些人前期可能会搞糊涂.他们之间到底是什么关系.当然也不除外当初的我. 注意:官方定义: 在Javascript中,每一个函数实际上都是一个函数对象. 我们先来看最简单的两个代码,也是最容易理解的. function fn(){} var obj = {}

JavaScript通过function定义对象并给对象添加toString()方法实例分析

 这篇文章主要介绍了JavaScript通过function定义对象并给对象添加toString()方法,实例分析了javascript中function定义对象及添加方法的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例分析了JavaScript通过function定义对象并给对象添加toString()方法.分享给大家供大家参考.具体分析如下: 下面的JS代码通过function定义了一个movie对象,在movie对象内定义了一个toString方法,toString