日期:2014-05-16  浏览次数:20263 次

JS大侠请入。一个古怪的问题

突然想到一段代码。如下:

?

function handler(){
    alert(this)
}

{}.test = handler;
{}.test()

?

按照我的思路,这个应该弹出object。

?

不过,结果很失望。在IE和FF下都报错。

?

和朋友们交流了一下,也没什么合理的解释,顾请各位路过的大侠们帮忙解答下。

?

大恩不言谢!!

1 楼 北极的。鱼 2011-08-17  
最新测试,chrome也报错。
2 楼 xuedong 2011-08-17  
不太理解{}.test = handler; 这个是什么用法了
3 楼 北极的。鱼 2011-08-17  
xuedong 写道
不太理解{}.test = handler; 这个是什么用法了


==============================
为了改变handler函数内部this指针的指向。
这个有问题???
4 楼 JavaHack 2011-08-17  
{}.test = handler; 
这句创建了一个对象

{}.test() 
下面又是一个新对象
所以报的错  应该是没有该属性

5 楼 北极的。鱼 2011-08-18  
JavaHack 写道
{}.test = handler; 
这句创建了一个对象

{}.test() 
下面又是一个新对象
所以报的错  应该是没有该属性


=========================

恍然大悟,呵呵,对的。多谢了。

不过,还是有问题。按照这么理解,应该是弹出undefined。不过,结果是什么都没弹出,并且报告脚本错误。
6 楼 justjavac 2011-08-18  
{}.test = handler; 
这句话呢,{}被当成了代码块处理,所以,是语法错误。可以这样调整,
({}).test = handler;
7 楼 justjavac 2011-08-18  
justjavac 写道

{}.test = handler; 

这句话呢,{}被当成了代码块处理,所以,是语法错误SyntaxError。可以这样调整,
({}).test = handler;


{}.test()  

这句呢,无容置疑,肯定是错的。如果改变优先级呢,比如,想上一个一样,写成
({}).test()

这样,也是错误的,但是这次不是语法错误SyntaxError,而是类型错误TypeError,你可以这样试试,去掉最后面对函数调用,如下:
({}).test

此时的输出是undefined,对undefinited进行函数调用,肯定是错误的。
如果你想用匿名对象的话,可以这样:
({test:function(){alert(this);}}).test();