我们都得到“TypeError#1009无法访问空对象引用的属性或方法” - 然后 - 没什么大不了的,但有时候调试很令人沮丧。
Flash为你提供了调用堆栈(这是一个开始),但是由你来决定空对象的位置 - 是否有可能找出究竟哪个引用正在抛出错误?
鉴于以下(易出错)功能:
function nullObjectReferenceError():void
{
var obj:Object;
var prop:* = obj.nonExistentProperty;
}
我不想仅仅使用TypeError中的调用堆栈,而是想跟踪类似的内容:“无法访问 obj.nonExistentProperty 的空对象引用的属性或方法em>“ - 这甚至可能吗?
答案 0 :(得分:4)
如果在Flash IDE中选中“发布设置”下的“允许调试”,它会在代码中为您提供导致错误的行号。
答案 1 :(得分:2)
显而易见的解决方案是首先停止使用这种通用的容易出错的代码。你永远不应该使用'*'类型,几乎从不使用'对象'类型。
要在运行时捕获它,你总是可以说:
if(obj == null)
throw new Error("null obj passed in!!");
if(obj.nonExistentProperty == null)
throw new Error("obj doesn't have the prop!! the obj was: "+obj);
答案 2 :(得分:0)
TypeError
将不会再向你提供任何信息。
据我所知,没有已知的方法来实现这一点(即哪个对象引发了错误)。
您最好的选择是在函数开头设置断点并手动调查变量。这就是我的工作,对我来说效果相当好。