下面的代码应该抛出一个Error #1009: Cannot access a property or method of a null object reference
:
var label:Label;
label.text = value;
但是,如果它位于由 MXML 数据绑定设置的 setter 内部,则不会:
public function set buggySetter(value:String):void {
var label:Label;
label.text = value; //will fail silently
}
为了重现这种奇怪的行为,首先,通过扩展 s:Label 创建一个简单的自定义组件:
package {
import spark.components.Label;
public class BuggyLabel extends Label {
public function set buggySetter(value:String):void {
var label:Label;
label.text = value; //will fail silently
}
}
}
第二,将 BuggyLabel 添加到 Application 并绑定 buggySetter:
<fx:Script>
<![CDATA[
[Bindable]
public var foo:String = 'NULL has no properties';
]]>
</fx:Script>
<local:BuggyLabel buggySetter="{foo}"/>
为什么这个应用程序会静默失败?