function Odemo(name)
                {
                    return this.name=name;
                }
                

                alert(Odemo('abc').name); //显示undefined
       alert(new Odemo('abc').name); //显示abc,为什么要new一下才有值?
求指点。

解决方案 »

  1.   

     function Odemo(name)
                    {
                        return this.name=name;
                    }
    你的这个方法是类里面的吧
    调用此方法要实例化类
    所以得用new,不new没对象不能调用方法啊
    如果单纯的一个函数就不用,不信你试试
    function Odemo(name)
    {
    return 123;
    }
    alert(Odemo(1));
      

  2.   


     function Odemo(name)
                    {
                        return this.name=name;
                    }
                    
                    
                    alert(Odemo('abc').name);    //显示undefined 此时,this指向的是window对象
               alert(new Odemo('abc').name);    //显示abc,为什么要new一下才有值?此时的this指向的是Odemo的实例
      

  3.   

    因为属性只有对象才有
    new 一下,函数就被解释成类,并返回实例
      

  4.   

    因为里面有个return 所以  alert(Odemo('abc').name);    
    //Odemo('abc')的结果是this.name即window.name
      alert(window.name.name)的结果当然是undefined
     alert(new Odemo('abc').name);    
    //new Odemo('abc')的结果是返回Odemo的一个实例,而实例化时this指向的是实例的本身
    所以实例.name 当然就是abc
      

  5.   

    1、new运算把构造函数的数据类型由Function转换为Object,并捆绑构造函数内部的this指针指定到Object上。
    2、alert(Odemo('abc').name);过程,Odemo是一个全局函数调用,返回的内部this指向全局对象window,this.name相当于window.name,而window没有定义name属性,所以SHOW “undefined”。
    3、alert(new Odemo('abc').name);过程,通过new运算,JS把this指针绑定到了该函数所构造出来的对象上,当然SHOW “abc”。
      

  6.   

    刚才说成PHP的了,你那个name必需得在内存里占个地方
    也是说是对象需要实例化
    也只是这个原因,你可以改成这样,说不定就能更理解一点
    var name2="123";   
    function Odemo(name)
     {
      return name2=name;
     }
     Odemo('abc');
     alert(name);
    this->name是属于这个对象的,你未定义,那就得实例化,不然内存里不知怎么放
               
      

  7.   

                  function Odemo(name)
                    {
                        return this.name=name;
                    }
                    
               
               var o = new Odemo('abc');    
               //等同
               var o = {};
               Odemo.call(o,"abc");
               alert(o.name)
    应该差不多这样吧