<script>
var testvar = 'window属性';
var o3 = {
   testvar:'3',
   testvar2:'3**',
   fun:function(){
  alert('o3: '+this.testvar);//问题一、结果是3,那这个this代表的是o3还是window?
  inner = function(){
 alert('o3-inner: '+this.testvar);//问题二、结果是'window属性',这里为什么是这个结果,3已经覆盖了全局的那个testvar了呀?
 alert('o3-inner: '+this.testvar2);//问题三、结果是undefined(未定义),这个结果就更想不来原因了?
  };
  inner();
   }
};
o3.fun(); var aa = function(){
testvar=3;
testvar2=4;
 fn = function(){
  alert('o3: '+this.testvar);
  var inner = function(){
 alert('o3-inner: '+this.testvar);
 alert('o3-inner: '+this.testvar2);
  };
  inner();
   }
}
var obj = new aa();
//obj.fn();问题四、这样不能调用,而用window就可以,为什么会这样?
window.fn();
</script>

解决方案 »

  1.   

    一. 当然是指o3, 弹出来的结果已经告诉你了
    二. this是指window, this.testvar 是定义在头行的那个testvar
    三. 原因同二, window下面并没有定义testvar2
    四. 如果把fn明确指定为aa里的方法,
        var aa = function(){
            this.fn = function(){ ...
        就可以用obj.fn()了
      

  2.   

    谢谢楼上的朋友,那我还想问下问题二的那个this怎么会指向window?
    能帮小弟解释清楚点吗?
      

  3.   

    http://topic.csdn.net/u/20091112/12/5dc4d07b-e918-490a-9397-ab81f9b49108.html
      

  4.   


    参见:http://topic.csdn.net/u/20091113/23/b46a1246-eadb-4c13-b5a3-5bc3a2c79201.html