var obj = { a:this.b, b:123}
alert(obj.a)
请问这个a属性怎么取不到b属性的123呢,要想取怎么取到呢?

解决方案 »

  1.   

    {}已经是实例了,this就不是指obj了,b = 111
    var obj = { a:this.b, b:123}
    alert(obj.a)
      

  2.   

    var obj = { a:function(o){return o;},b:123 }
    alert(obj.a(obj).b);
      

  3.   

    在定义类时this表示自身,也就是this要在类的构造函数内部才能指向类的对象,而{}只是给一个对象赋值,并不是定义了一个类,这个要区分清楚,{}内部并不是构造函数。你这儿的this的只带和在{}外面写一个this是完全一样的
      

  4.   

    var obj = { a:2, b:3,c:function(){this.m=this.a*this.b}}
    obj.c()
    alert(obj.m)
    请问c方法中a前面的this, 怎么就表示了a属性?
    还有这个m,它是obj对象的属性吗?
      

  5.   

    我们仔细分析下:
    给c赋值一个函数,该函数就是obj对象的一个方法是肯定的,在对象的成员方法中,this指代对象本身
    就像你不这样写,你换一种写法
    var obj = { a:2, b:3}
    obj.c=function(){this.m=this.a*this.b;}
    也是同样的效果,并不是说你这个就变成构造函数了,只是js弱类型的灵活性体现。
    既然此处this指代obj本身,那执行c方法后就相当于执行了obj.m=obj.a*obj.b;
    出现这种结果就很显然了吧?
      

  6.   

    看来你没有理解弱类型的灵活性。
    这样理解:
    在obj={a:2,b:3,c:function(){this.m=this.a*this.b;}}后
    obj.a=2,obj.b=3,obj.m=undefind(你可以自己验证)
    此时obj.m没有赋值,所以是undefind(js中所有没有定义的变量值都是undefind)
    然后执行obj.c(),如之前所说,相当于执行obj.m=obj.a*obj.b,此时obj.m被赋值,故其为6
    所以说你不要管什么是不是属性的问题,其实只是有没有赋值的区别
      

  7.   

    谢谢 wzs_xyz 大概明白这意思了 
      

  8.   

    告诉你答案
    这样写就可以取到了
    var obj = { b:123, a:this.b}
    alert(obj.a)
    看懂没?
      

  9.   

    var obj= {
    a:1,
    b:this.a
    };
    alert(obj.b);
    输出:undefined这里this指向window:
    var a = 0
    var obj= {
    a:1,
    b:this.a
    };
    alert(obj.b);
    输出为0。但如果将b属性定义为一个方法则没问题:
    var obj= {
    a:1,
    b:function(){return this.a;}
    };
    alert(obj.b());
    输出1,this指向obj。
      

  10.   

    那人根本不懂。
    要弄清楚this在各种情况下的指代对象,不真真正正写上几个控件是不得行的
    其实说穿了也简单:
    方法中的this指代的就是方法的拥有者,全局函数中的this指代window,局部函数中的this要看上下文,看其归属的对象
    但是要记住,this只有在函数调用时才能确定其中的this的指代,比如同一个函数作为全局函数被调用和作为方法被调用其this代表的东西就不一样。
    var obj=new Object();
    function test()
    {
      alert(this);

    obj.test=test;
    test();
    obj.test();//都是这个函数,但是this不一样,自己体会
    话说了这么多,你该结贴给分了吧?