当前位置: 代码迷 >> Web前端 >> window指代大局this
  详细解决方案

window指代大局this

热度:138   发布时间:2012-10-07 17:28:51.0
window指代全局this
学习<王者归来>时遇到的问题 ...
看代码 :

----辅助内容

	function dwn(_a_)
	{
		document.write(_a_ + "<br/>") ;
	}


疑惑

function test()
	{
		this.aa = 10 ;
		return function()
		{
			return 1 ;
		}
	}
	
	var  aa = new test();
	var b = test();
	
	dwn( aa+'   ' +b )


结果是:10 function () { return 1; }

但如果代为:


function test()
	{
		this.aa = 10 ;
		return function()
		{
			return 1 ;
		}
	}
	
	var  a    = new test();
	var b = test();
	
	dwn( a +'   ' +b )


结果为:function () { return 1; } function () { return 1; }

疑惑中 ,应该返回的是第二种 ,为什么this的属性名定义的和外部一样时会出现这种问题....

在变一种提交方式 ...
把代码一改一下 ..

function test()
	{
		this.aa = 10 ;
		return function()
		{
			return 1 ;
		}
	}

	var b = test();  // (1)
	var  aa   = new test();  //(2)
	
	
	dwn( aa+'   ' +b )


执行的结果是 :function () { return 1; } function () { return 1; }

如此怪异的行为 ,我在FF调试下发现 , 在执行 (2)时 ,要从新进入test()函数,改写aa的值 ,
如果代码为
var  aa   = new test(); 
dwn(aa)
var b = test(); 
dwn(b) ;


也是预期的效果

我想这应该是全局变量名的问题 . 在test()函数中 this指代的是window对象 ,
在执行完  var  aa   = new test(); aa应该是 function(){...}
但在 var b = test()中 this.aa = 10 有从写了aa就出现了代码一的样式 ...
不知正确与否 , 望高手指正 ,
  相关解决方案