262008
 

通常情况下,我们会采用this来激发比较那个的IDE代码提示功能。但是以下的这种情况下就会出现一些莫名其妙的问题。
比如以下的这种情况,取trace(this.width,this.height)就是undifined,而trace(width,height)却可以取到正确值
以下使用ActionScript3在Flex Builder 3下测试,有兴趣的同学可以在其他语言中测试:)

xx.addEventListener(Event.COMPLETE,function(event:Event):void{
   //在这里千万要慎用this.
});

Example:

<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute” addedToStage=”addedtostg()”>
 <mx:Script>
  <![CDATA[
   private function addedtostg():void
   {
    btnTest.addEventListener(MouseEvent.CLICK,function(mevent:MouseEvent):void
    {
     trace(“Button Click(Use this)”,this.width,this.height);
     trace(“Button Click(Don’t use this)”,width,height);
     //trace(this.lblTest.text);
     //执行以上就会报Error #1010: 术语尚未定义,并且无任何属性。
     //而执行trace(lblTest.text);就是正确的
     //trace(describeType(this));
     txtOutput.text+=”Button Click(User this): “+this.width+” “+this.height+”\n”;
     txtOutput.text+=”Button Click(Don’t use this):”+width+” “+height+”\n”;
     txtOutput.text+=lblTest.text+”\n”;
    }
    );
   }
   
   private function btn2Click():void
   {
    trace(“Button2 Click”,this.width,this.height);
    txtOutput.text+=”Button2 Click: “+this.width+”  “+this.height+” \n”;
   }
  ]]>
 </mx:Script>
 <mx:Button id=”btnTest” x=”105″ y=”70″ label=”Button”/>
 <mx:Label id=”lblTest” x=”287″ y=”72″ text=”Label”/>
 <mx:Button x=”105″ y=”112″ label=”Button2″ click=”btn2Click()”/>
 <mx:TextArea id=”txtOutput” x=”17″ y=”161″ width=”280″ height=”159″/>
</mx:Application>

而Flex Builder的代码提示却没有对这样的代码进行修正,依然进行错误地提示。

项目下载:includetest

  One Response to “慎用this”

  1. 这是因为 Function的apply 或 call的thisObject对象问题。
    这比起AS2时代来说,要好很多哦,哈哈

 Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>