六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 19|回复: 0

window指代全局this

[复制链接]

升级  20%

2

主题

2

主题

2

主题

童生

Rank: 1

积分
10
 楼主| 发表于 2013-1-29 09:35:04 | 显示全部楼层 |阅读模式
学习<王者归来>时遇到的问题 ...
看代码 :

----辅助内容
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就出现了代码一的样式 ...
不知正确与否 , 望高手指正 ,
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表