var baz = 2;
var foo = { 
bar: function() {return this.baz; }, 
 baz: 1
};
(function(){ 
 var baz = 2;
 alert(arguments[0]());
 })(foo.bar);各位大大,关于this,都快晕死了
个人认为, this指的是调用this所在方法的对象,但上面这个怎么是undefined呀

解决方案 »

  1.   

    var foo = { 
    bar: function() {return this.baz; }, 
    baz: 1 
    }; 
    (function(x){ 
    alert(x()); 
    })(foo.bar); 是谁调用了x
    没有就是window
      

  2.   

    cloud老大这个我知道呀
    var foo = { 
    bar: function() {return this.baz; }, 
    baz: 1 
    }; 
    (function(){ 
    alert(arguments[0]()); 
    })(foo.bar); 
    怎么就是undefined?
      

  3.   

    你这里的this等于foo.bar
    var baz = 2;
    var foo = {
    bar: function() {return this.baz; },
    baz: 1
    };
    (function(){
    var baz = 3;
    alert(arguments[0]);
    })(foo.bar()); var baz = 2;
    var foo = {
    bar: function() {this.bar=4;return this.baz; },
    baz: 1
    };
    (function(){
    var baz = 3;
    alert(arguments[0]());
    })(foo.bar); 
    自己对比下就知道
      

  4.   

    foo.bar 内部没有定义baz,所以undefined
      

  5.   

    var vv = {
    ii:6,
    fun:function(){
    alert(this.ii);
    }
    } vv.fun();这样是六没有错呀。
      

  6.   

    楼上的理解有偏差
    字数补丁.exe
      

  7.   


    var baz = 2;
    var foo = {
    bar: function() {return this.baz; },
    baz: 1
    };
    (function(){
    var baz = 2;
    alert(arguments[0]());
    })(foo.bar); 
    其实和下面的是一样的
    var baz = 2;
    var fun=function(){return this.baz;}
    (function(){
    var baz = 2;
    alert(arguments[0]());
    })(fun); 
      

  8.   

    你这样当然可以,你是在bar:function() {this.baz=4;returnthis.baz; }里面,把this里的baz给添加了,
    所以不管this指向哪,肯定得4这样没有说明问题,这个this到底指向了哪
      

  9.   

    this指向的是foo.bar 和foo没有任何关系
      

  10.   

    还有为什么像cloud大神那样直接用形参就行(指向window),但用arguments就变成undefined了呢
      

  11.   

    如果真是指向foo.bar,那么在foo.bar,里面写baz = 5,如var foo = {
    bar: function() {var baz = 5;return this.baz; },
    baz: 1
    }; 
    怎么还是undefined,你这里的foo.bar是当对象还是类?
      

  12.   

    http://topic.csdn.net/u/20100211/16/83d4b207-977d-4ebb-be95-6cf3011f38ba.html
      

  13.   

    太好了,我本来除了第6题不明白,还有第13题也不明白,这次有点明白了,呵呵
    谢了,看到你的答案了,错了之后,猜想了一下也认为是arguments,还是你nb,上去就知道是arguments,不是window,我想大部分都认为是window,呵呵
      

  14.   

    不知道怎么桃子就做了14题,还有14题呢,
    都是js语言本身的,大家可以去看看,琢磨琢磨
    http://adamlu.googlecode.com/svn/trunk/js_quiz.html
    这是链接
      

  15.   

    你的这个例子
    就是让 我们明白 js中的this 不是我们想象中的 this
      

  16.   

    里面有一题
    100['toString']['length']  
    这个为啥是1
      

  17.   

    this指的是调用该方法的对象。在匿名函数中arguments[0]()执行时,调用foo.bar方法的对象是匿名函数的arguments我对你的函数做了点小的修改。
    var baz = 2;
    var foo = {
    bar: function() {return this; },  // 直接返回this
    baz: 1
    };
    (function(){
    var baz = 2;
    alert(arguments[0]() === arguments);  // 在这里判断返回的对象是否等于arguments  输出的是ture
    })(foo.bar);
      

  18.   

    Number里的toString方法有一个形参,而函数的length是指此函数的参数个数,所以就是1喽
      

  19.   


    那怎么知道toString方法有一个形参
      

  20.   

    呵呵,cloudgamer大大,这俺也不清楚,可能是靠toString()的用法吧
    好啦,结贴喽