var obj1 = {
   func:function(){
         this.func();
         obj1.func();
   } 
}
var obj2 = {
   func:function(){
         this.func();
         obj1.func();
   } 
}
这样写 你能看出区别了把

解决方案 »

  1.   

    obj的值是固定的,但this的值是不固定的。this的值总是指向函数(方法)所在的对象比如
    var aaa = {fa: obj.fun};
    同一个函数(方法),其中的this指向和就是aaa对象了
      

  2.   

    首先,this 是运行时确定的,就是说,运行时,这个 fun 函数作为哪个对象的方法执行,_this.fun() 就调用该对象的 fun()方法(就是不断的自己调用自己,这会造成死循环),这个运行时对象是不确定的。
    obj.fun() 是指调用 obj 对象上的 fun() 方法,这里的 fun() 作为 obj 对象的方法调用,是确定的。
    举个栗子,var obj = {
    'st': function() {},
    'tt': {},
    'name': 'jjj',
    'fun': function () {
    var _this = this;
    _this.fun();
    obj.fun();
    }
    };var obj2 = obj;
    obj = {
    'fun': function () {
    alert("我是修改后的 obj 对象的 fun 方法");
    }
    }
    obj2.fun();
    这段代码里,最后一条调用语句, obj2.fun(); 执行后,该函数里面的两个对象方法调用中,
    _this.fun() 和 obj.fun() 调用的 fun 方法是不一样的,
    _this.fun() 指的是 obj2.fun() ,即这个函数会一直自己调用自己,造成死循环。
    而 obj.fun() 的执行 会 alert,不过由于上一条语句的原因,该函数永远也不会执行。