第一个是一个函数。。
执行后返回一个对象。第二个是一个函数。。
实例化后可成为对象。第一个和第二个无区别。。第三个只是把showCar给了prototype这个特殊的对对象(传说中的原型)它们的函数存放的不通。。(它们是指把1-2看做a,3看做b)第一个和第二个的showCar方法为一个独立的函数
其this指针指向相对应的对象如果创建两个a即var o1 = new Car(1, 1); //第一个函数var o2 = new Car(1, 1); //第一个函数
这样o1.showCar --------------- 函数1o2.showCar --------------- 函数2而创建两个b则var o1 = new Car(1, 1) //第三个函数var o2 = new Car(1, 1) //第三个函数o1.showCar --------------- 
                         |
                         --------- prototype.showCar 函数
                         |
o2.showCar ---------------

解决方案 »

  1.   

    这里,给你个很结实的demo<script type="text/javascript">
    var wc = new Function();
    wc.prototype.a = function () { return "a"; }var o1 = new wc;var o2 = new wc;
    alert(o1.a === o2.a && o2.a === wc.prototype.a);
    var cs = function () {
    this.a = function () { return "a"; };
    };var o2 = new cs;
    var o3 = new cs;alert(o2.a === o3.a);
    </script>
      

  2.   

    请允许无辜的我,温柔的问下你不是  cloudgamer (欢迎交流qq215754452)  的马甲吧?- -|||
      

  3.   

    请问 muxrwc(需时越兔) 后面那个demo为什么返回false呢~结果不是一样的吗?
      

  4.   

    不一样啊你看我第一次回复
    就是被btbtd(转型(L/C)AMP)同学踩在脚底下的那个
      

  5.   

    都返回function () { return "a"; }这函数 可以解释一下吗?上面你那我没看明白
      

  6.   

    就是说,它们的值虽然一样。但是它们的引用地址却不同
    这样的话
    a创建一次则创建一个funcb创建多少个都是引用的那一个func所以说b比较节省资源但是一个对象也不会创建那么多次吧
    所以说都无所谓啦。。自己感觉怎么写方便就怎么写好了
      

  7.   

    var o2 = new cs;
    var o3 = new cs;alert(o2.a === o3.a);这个操作是比较指针当然换成==也是比较指针地址。。
    而不是比地址里的内容。。
    如果你换成。。
    alert(o3.a.toString() === o4.a.toString());
    就相等了。。
      

  8.   

    晕,alert(o3.a.toString() === o4.a.toString());这个比较有意义吗下面这个比较也是返回 True,难道document等于window吗?
    alert(document.toString()===window.toString())toString之后都是字符串"[object]"
      

  9.   

    这里,给你个很结实的demo<script type="text/javascript">
    var wc = new Function();
    wc.prototype.a = function () { return "a"; }var o1 = new wc;var o2 = new wc;
    alert(o1.a === o2.a && o2.a === wc.prototype.a);
    var cs = function () {
    this.a = function () { return "a"; };
    };var o2 = new cs;
    var o3 = new cs;alert(o2.a === o3.a);
    </script>--------------wc.prototype.a = function () { return "a"; } 这是什么意思?Function.prototype.a = function(){ return "a"; }给原型添加方法不是这样得么?
      

  10.   

    我的理解是这样:
    用class.prototype.fun = function(){}
    的方法比较节省内存,
    因为这样做是把这个function附加到这个类的原形对象上,
    在new的时候就不会在内存中分配一个区域来储存代码,而只用存储一个指针即可。
      

  11.   

    不好意思,说错了。其实指针都不用存储。因为是通过prototype这个指针访问的。
      

  12.   

    个人观点:
    假设
    方法一造出来的是 car1
    方法二造出来的是 car2
    方法三造出来的是 car3一方面:
    你问car1有没有火炮,car1看了看自己,说没有。
    你问car2有没有火炮,car2看了看自己,再去工厂里看了看造自己的模子,说没有。
    car3和car2一样。
    二方面:
    工厂的模具升级,通过原型技术装上了火炮
    car1和car2还是没有;
    car3却可以用了。觉得造car2的厂家不太讨好欢迎大虾拍砖
      

  13.   

    换句话说
    car1是没爹的山寨货,基本没售后。
    car2是厂子里造的,有牌子,厂家提供了升级机会,但可能某些功能部件不能自行升级。
    car3大厂的车,所有功能部件都可以同步升级。
    当然,所有car你都可以给他个性化
      

  14.   

    这么说就清楚了...
    用prototype创建的方法是"静态方法"...static的...
    this.function创建的是"公有方法"...public的...
    还有在函数里面直接function 名字(...){}的就是"私有方法"...private的...
      

  15.   

    lz的昵称。
    唉,为什么web总能看到水源的人呢
      

  16.   

    最快: var a = {
    a:function(){..},
    b:"d"
    };