var obj1=new Object();  
obj1.p=1;  
obj1.getP=function(){  
  alert(this.p); 
}();
为什么这样就是undefined;
一定要
obj1.getP();

解决方案 »

  1.   

    oje1是你new 出来的一个对象,对象调用方法好像不是调用属性的吧
      

  2.   

    比价下面两个你就知道了:
    var obj1=new Object();  
    obj1.p=1;  obj1.getP=function(){  
      alert(this.p); 
    };function a(){
        this.p = 5;
        alert(this.p)
    }
    obj1.getP = a();//这明显是函数的返回值,而在a里面定义的属性p却成了function的属性
    仔细想想吧。不一样的。
      

  3.   

    this 是指向你函数本身,也就相当于你在调用obj1.getP(),而不是指向你这个对象obj!
      

  4.   

    lz这样写的话就可以取到obj1的p了
    var obj1 = {  
    p: 1,
    getP: function(){   
    alert(this.p);  
    }
    }
    obj1.getP();
      

  5.   

    没有得到我想要的答案
    我的意思其实很简单
    obj1.getP=function(){}() 
    与obj1.getP()
    在结构上面好像没有区别啊。
    为什么后者的this是obj1
    而前者我感觉貌似this是obj1.getp
      

  6.   

    没有什么原因 这种给对象定义方法是错误的
    obj1.getP=function(){   
      alert(this.p);  
    }();
    上面那行代码 肯定是先执行后面的函数
    而此时this关键字就指的是function本身 他没有P属性 肯定弹出undefined
    函数执行完毕后 才将返回值传递给obj1.getP 且此时的getP已经不是obj1的方法了 只是obj1的一个属性罢了
    看看下面的例子你就明白了

    <!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>example</title>
    </head>
    <body>
    <script>
    var obj1=new Object();   
    obj1.p=1;   
    obj1.getP=function(){   
      alert(this.p);
    return "aaa"
    }();
    document.write(obj1.getP)
    </script>
    </body>
    </html>
      

  7.   


    虽然
    obj1.getP=function(){   
      alert(this.p);  
    }();
    这种调用法。肯定是错的。因为function(){}(),肯定先执行后面的function,然后再绑定到getP句柄,所以肯定不对但是,这种方法也不对,那就不可思议了。
    <html>
    <head>
    <script type="text/javascript">
    var obj1 = new Object();   
    obj1.p = 1;   
    (obj1.getP = function(){
       alert(this.p);  
    })();</script>
    </head>
    </html>如果说,第一段代码调用失败。是因为getP绑定了function地返回值,那么我们看看这段
    <html>
    <head>
    <script type="text/javascript">
    var obj1 = new Object();   
    obj1.p = 1;   
    alert(obj1.getP = function(){
       alert(this.p);  
    });</script>
    </head>
    </html>
    加上括号以后,这绝对是函数句柄阿。
    但是第2端调用仍然失败了。
    看来javascript机制上,在obj1.getP这句话执行完之前,并没有把this正确指向obj1
    并且,this,也并没有指向function,而是window所以,如果一定要这样调用,可以用以下方法
    <html>
    <head>
    <script type="text/javascript">
    var obj1 = new Object();   
    obj1.p = 1;   
    (obj1.getP = function(){
       alert(this.p);  
    }).call(obj1);</script>
    </head>
    </html>
      

  8.   

    var obj1=new Object();   
    obj1.p=1;   
    obj1.getP=function(){   
      alert(obj1.p);  
    }();orvar obj1=new Object();   
    obj1.p=1;   
    obj1.prototype.getP=function(){   
      alert(this.p);  
    };
      

  9.   


    优先级的问题, 操作符=的优先级没有()高啊
    所以执行的顺序是, function(){}(); 然后将函数的返回值返回给obj1.getP 这显示不是你想要的
    你想要的是(obj1.getP = function(){})()即先=再()