第二个问题经测试,分析结果如下var f = function(){
this.c = 123;
return this;
}
alert(new f().c);构造函数默认会返回一个对象,相当于return this; 如果显示指定return,那就会返回return 之后的东西var f = function(){
      this.c = 123;
      return window;
}
alert(new f().document);
那我们创建的新对象(f的实例哪去了?)

解决方案 »

  1.   

    这两个问题是很怪,感觉第二个问题,或许是为了以后扩展用的吧,不过写成函数和函数对象定义两种方法确实是有些区别的,比如下面的例子
    <script language=javascript>
    function 天外水火()
    {
    alert("学习")
    }
    var 天外水火TEMP = 天外水火;
    /*
    function 天外水火(){
        天外水火TEMP();
        alert("再学习");
    }
    */
    天外水火 = function(){
        天外水火TEMP(); 
        alert("再学习");
    }
    天外水火()
    </script>
      

  2.   

    我上面的帖子有些跑题,怪我,不过也许可以从里面得到一些启示。
    这两种是不一样的呀,估计new f()返回的是function对象,并非马上执行,而是直接调用则执行了,可以看看下面的
    <script language=javascript>
    var f = function(){
    this.c = 123;
    return this;
    }
    alert(f().constructor)
    alert(new f().constructor)
    alert(f()===new f())
    </script>
      

  3.   

    1. if(typeof window.jQuery == "undefined") {
          window.undefined = window.undefined; 这句是起什么作用?
    ------------------------------------------
    window.undefined=window.undefined;
    是为window声明一个undefined的属性当访问windows.undefined的时候window对象找不到以"undefined"命名的属性或者全局变量
    系统会返回一个 undefined数据类型的值,这个访问是安全的,你可以试一下
    alert(window.a)会显示undefined,
    这样也就间接的给window对象声明了一个名为undefined的属性
    以后就可以使用window.undefined这个属性了有的浏览器没有undefined这个属性,但是都对于一个没有声明的对象,typeof这个对象返回的都是字符串"undefined"这样做的目的只是为了给window对象增加undefined这个属性,以后可以直接使用
    if(a==undefined)判断,而不用再if(typeof a =="undefined")判断
      

  4.   

    整理了下思路,我这边现在的进展只是知道这两种是有区别的
    <script language=javascript>
    var f = function(){
    alert("asdasd")
    for( var i in this)
    {
    document.write(i+"<br>")
    }
    }
    //alert(f())
    alert(new f().constructor)
    </script>
      

  5.   

    第二个问题很显然
    var xml = XMLHttpRequest();
    xml得到的是 ActiveXObject实例

    var xml = new XMLHttpRequest();
    xml得到的是 XMLHttpRequest实例根据个人需要来获取不同的对象就是了个人愚见,不对之足请指正
      

  6.   

    把XMLHttpRequest声明为一个类可以扩展其他属性或方法
    可能这就是作者的用意
      

  7.   

    真的看不出这样有什么好处, 或者作者是为了凸出oop的应用
      

  8.   

    查了一下资料,关于第一个window.undefined问题,果然最主要的原因和LEO兄弟的差不多,把资料提出贴出来了,估计现在用的机会不象以前那么多了(因为IE5已经很少了),英文原文在下面,翻译过来差不多就是说
    在IE5里不可以a="undefined"而需要用typeof a == 'undefined'来判断,而使用了这个,就可以把typeof那句取掉,而使用一次比较操作,不需要额外的操作
    compare if a variable is equal to undefined using the typeof unary operator, because if you, someday, dicide to get these things work on IE 5, you can not compare to the undefined constant (?), after all, it doesn't exist on IE 5.0. Compare like this one:
    if(b || typeof b == 'undefined') { ...No need to go to the extra work. jquery.js begins with this:window.undefined = window.undefined;So "undefined" exists in every browser. This is a handy line of code to put
    in any JavaScript - it's completely compatible with both old and new
    browsers.
      

  9.   

    第二个问题很显然
    var xml = XMLHttpRequest();
    xml得到的是 ActiveXObject实例

    var xml = new XMLHttpRequest();
    xml得到的是 XMLHttpRequest实例----------------------------
    这种说法我感觉不对
    var f = function(){
    return window;
    }
    var f = function(){
    return window;
    }
    alert(f()===new f()); => true可以看出 f() 和 new f()都是window对象,它们是相同的.

    XMLHttpRequest = function(){
    return new ActiveXObject("Microsoft.XMLHTTP");
    };
    alert(XMLHttpRequest() == new XMLHttpRequest());  => false
    之所以不同是因为它们是不同的ActiveX实例,
      

  10.   

    恩,稻草人说的有道理,不过我还是觉得是作者随意写的这部分
    <script language=javascript>
    var a=new ActiveXObject("Microsoft.XMLHTTP");
    var b=new ActiveXObject("Microsoft.XMLHTTP");
    alert(a==b)
    </script>
      

  11.   

    这个也说明了草人的观点是对的
    <script language=javascript>
    var a=function(str)
    {
    this.c=str
    }
    var b=function(str)
    {
    return new a(str);
    }
    alert(new b("111").c)
    alert(b("222").c)
    alert(new b("333").constructor)
    alert(b("444").constructor)
    </script>
      

  12.   


    这样定义只是为了使用window.XMLHttpRequest来访问用XMLHttp对象?
    就这么简单吗?
      

  13.   

    感觉作者把NEW对象写在函数里,有可能是因为现在很多程序都要求唯一实例养成的习惯,不过作者又没那么写,只是NEW了一个,所以我才觉得作者是习惯,顺手写了一个。
    比如下面简写了一个唯一实例的例子
    <script language=javascript>
    var temp=null;
    var a=function(str)
    {
    this.c=str
    }
    var b=function(str)
    {
    if(temp)
    {
    temp.c=str
    }
    else
    {
    temp=new a(str)
    }
    return temp;
    }
    var HB1=new b("111")
    alert(HB1.c)
    var HB2=new b("222")
    alert(HB1.c)
    alert(HB2.c)
    </script>
      

  14.   

    用意是为了兼容浏览器因为 XMLHttpRequest是firefox默认带的对象,在ff中使用
    xml = new XMLHttpRequest()就可以了,
    windows的话就用 new ActiveXObject("Msxml2.XMLHTTP");
    上面说过
    XMLHttpRequest() 和 new XMLHttpRequest()的效果是一样的,
    而firefox中后者才是正确的语法,
    说明作者不是随意写的, 用意就在此. 真是高明.
      

  15.   

    发现个问题<script type="text/javascript">
    function f(){
    return 1;
    }
    alert(f()==new f()); //显示false,为什么改为return window;就显示true
    </script>
      

  16.   

    第一个问题我还是没太理解.
    1. if(typeof window.jQuery == "undefined") {
    window.undefined = window.undefined;
    如果是为了兼容是不是
    window.undefined = window._________$$$$$$_______这样也行?
    只要后面的返回undefined就可以?
      

  17.   

    明白了,是为了统一获取XMLHttp对象的写法
    window.undefined=window.任何一个没定义的东东就可以;//结果是一样的
      

  18.   

    早上你问我的时候,我也试验过window.undefined那句,疑问跟你一样,哈哈XMLHttpRequest.prototype.....估计是这个意思,太牛了。。
      

  19.   

    <script language=javascript>
    function a()
    {
    this.Action = "functiontext";
    return 1;
    }
    var b = a();
    var c = new a();
    //if(b==c)
    {
    alert(b.Action); //undefine
    alert(c.Action); //functiontext
    }
    alert(b); //1
    alert(c); //[object Object]
    </script>呵呵,不错。。
      

  20.   

    if ( !window.XMLHttpRequest )
    {
        XMLHttpRequest = function(){
            return new ActiveXObject("Microsoft.XMLHTTP");
        };
    }var xml = XMLHttpRequest();         @1
    var xml = new XMLHttpRequest();     @2@1 返回的可能是null,undefine,甚至是一个integer。
    @2 能保证返回的一定是一个object; 在做 xml.someoper() 时
      @1就有可能出错了。 
      @2只是IE自己alert(undefine); 更友好吧~
      

  21.   

    var x=new XMLHttpRequest();应该没有那么复杂,最直接的就是使IE兼容的XMLhttpRequest的使用方法与其它的浏览的接口一致。
      

  22.   

    省钱屋,隆重开张。提供深圳地区最新的购物、娱乐以及饮食打折信息。
    欢迎点击访问,诚恳接受大家的意见。如被采用,赠送无毒娃娃一个(价值30元)
    www.sqhome.cn
      

  23.   

    第二个问题是浏览器的兼容问题原因是基于IE和基于Mozilla内核的浏览器对于XMLHttpRequest对象的实现方法不同,这么做自然是为了兼容不同的浏览器~~~
      

  24.   

    我的代码解决这个问题function convertToDecimal(){
       $.ajax({
    type: "GET",
    url: "/ch03-CharacterDecoder/response",
    data: "key=" + $("#key").val(),
    dataType: "html",
    success: function(xml){
    //alert( "keypress code: " + $("key",xml).text() );
    /*
    var decimal = document.getElementById('decimal'); 
    decimal.value = $("key",xml).text(); 
            //等价于上面的代码。
    $("#decimal").val($("key",xml).text());
    */
    $("#decimal").val($("key",xml).text()); $("#rating").html("按键代码:" + $("key",xml).text());
    }
       })
    clear();
      }   function clear(){ 
        var key = document.getElementById("key"); 
       
        key.value=""; 
    // alert( "keypress code: " + $(this).html() );
      }
     全部源代码在下面的链接
    http://blog.csdn.net/zhngling/archive/2007/03/20/1535125.aspx
      

  25.   

    一个 function 在作为类来使用时,它里面的 return 值会作为 new 的句柄:
    function a(){this.name="class a";}
    function b(){this.name="class b"; this.id="bbb"; return new a();}var c = new b();
    alert(c.name)
    alert(c.id)通过这个例子可以看到, new b() 的结果跟 b 这个 class 一点关系都没有,已经被 return 偷梁换柱了。
      

  26.   

    window.undefined = window.undefined; 定义undefined变量了,只有在5.0以后IE才支持这个变量,写的很巧妙。其实连判断都可以省了。或var undefined;不赋值也等效
      

  27.   

    XMLHttpRequest根本不是函数,而是一个对象,new 就是新建实例了
      

  28.   

    window.undefined = window.undefined; 写的真tmd巧妙