书上说JavaScript函数格式是function加函数名再加(){}组成的。
可是我在书上怎么还见到这几种写法:                             一、假如A是个函数对象:A.m = function(){
                                                             document.write("abc");
                                                           }
                          这个函数怎么连名字都没有?理解不了?
                         
                             二、假如B是个按钮:B.onclick = new function(){alert("abc");}
                            
                          这个函数也很奇怪,它不但没名字还多了个new关键字,实在理解不了?
                        
                             三、function Car(){}
                             Car.prototype.name = "mawentao"; 
                             这个函数又怎么理解,它那prototype什么意思呀?
                             以上这些问题真的困惑我好久了,希望大家能帮帮我解决一下。
                             到底在JavaScript中函数总共有哪几种书写格式?希望大家帮我说明一下,我先提前谢谢大家了。

解决方案 »

  1.   

    1.A应该是对象,m是函数
    2.这样都理解不了,实在是无语了...假若我有特殊需要不在html写这个onclick事件而就是要在javascript上写,那我该怎么写?
    3.这里的Car明显是一个对象,name这里成了属性了,这里没有传统面向对象中的函数,你可以将function理解成类,关于prototype自己找找资料吧~
      

  2.   

    对象的属性可以是一个函数
    函数可以是一个类,所以可以用new来构造
    js中有匿名函数,只有一处调用,可以使用匿名函数
    prototype可以给一个函数添加一个属性,而属性可以赋值一个函数名,所以就可以直接构造一个匿名函数,
    或者构造一个有名的,然后把这个名字赋值给该属性即可
      

  3.   

    问题还是很有价值的,多写一些谈谈自己的看法。
    JS中声明函数大体上有三种方法:
    1.常规方法
    function funcName(var1,var2....){
       //add you code here
    }2.匿名函数引用法(找不到具体的称呼,暂且先这么叫)
    var funcName=function(var1,var2...){
       //add you code here
    }3.构造函数法
    var funcName=new Function("x","y","alert(x+y);");3中方法对函数的执行没有区别只是语法上和函数初始化的时候有些区别,通过如下实验
    可以看出他们的区别
    alert(fn1);
    alert(fn2);
    alert(fn3);function fn1(){
    alert("fn1");
    }var fn2=function(){
    alert("fn2");
    }var fn3=new Function("alert('fn3');");fn1();
    fn2();
    fn3();可以看到只有fn1被输出了函数体代码,其他两个都是undefined。因为JS的执行分为两个阶段
    预处理阶段和执行阶段,预处理阶段会对代码进行扫描分析并初始化变量表。通过第一种方法
    声明的函数在预处理阶段就会被初始化,而其他两种只有在执行阶段执行到相应行是才会被初始化.
      

  4.   

    接上一贴除了上面提到的初始化的时机有差异之外,他们是没有区别的。因为在JS中所有变量都是存储的都是数值
    而不是对象,只不过变量的不同这些值的意义有所不同,有的是直接可以使用的值,有的则是对象的地址
    ,可以理解为对象的指针。所以三中声明函数的方法只是函数指针的赋值时机有所区别。
        好了我只能谈到这个深度,下面我们对这个帖子提到问题进行下分析第一问掠过第二问
    B.onclick = new function(){alert("abc");}
    不知道从拿来的,很愚蠢,不用有任何作用.如果想绑定单击事件可以
    B.onclick = function(){alert("abc");}
    B.onclick = new Function("alert('abc')");
    个人认为这种写法应该这样理解
    B.onclick是一个通过由一个匿名function作为构造器生成的对象,通过下面的实验
    可能更好理解些
    var a={};
    a.func=new function(){this.id=1;this.name=2;};//function在这被作为构造器来使用而不是函数
    alert(a.func.name);
      

  5.   

    var fn2=function(){
            alert("fn2");
    }
    fn2()
    alert出来的是'fn2'啊,不是undefined
      

  6.   

    把alert(fn2)写在var fn2=function(){...};
    之前,注意顺序
      

  7.   

    谢谢大家了,我刚学习JavaScript,所以那些问题可能有点弱智了,但我还是想弄清它。
    再次谢谢5楼了,你真的讲的很清楚。
    可我还想问一下:是不是javascript中没有这中写法的B.onclick = new function(){alert("abc");} 
    那个new是不是多余的?
    还有你下面这代码又是什么意思?能帮我再说说吗?
    var a={};
    a.func=new function(){this.id=1;this.name=2;};//function在这被作为构造器来使用而不是函数
    alert(a.func.name);
      

  8.   

    在你给的那段代码中那个new 是多余的,但在别的地方则不一定,比如你可以使用哪种方法给你的
    某个对象的某个属性设置一个对象.在Java中实现哪种功能,你可能要这样写
    obj.yourProperty.setObject(new Object(var1,var2));
    在js中你可以通过定义类的方法实现和上述相同的用法,但也可以这样用
    obj.yourProperty=new function(){this.property1=xx;this.property2=xx};
    那个function此时在这里被作为了构造器来用,其作用相当于面向对象语言中的构造函数
    至于我写的那段代码可能值得解释的就那么几点
    var a={};//构造一个空对象相当于new Object(),类似的用法还用var a=[],var a=/^^\d+/gi;
             //这些都是js中的函数直接量,只是为了简写,知道就行了
    a.func=new function(){...};//JS中的对象在性质上很像java中的Map,可以通过key进行访问
             //也可以通过制定一个key添加一个对象,这行代码就是给空对象添加一个属性或方法