1

我有一个实现 setter 的基类(“Master”)(我们称之为“a”)。还有另一个类扩展了 Master(“扩展”)并覆盖了“a”设置器。

"a" 的 getter 每次都返回一个对象的新实例,并且在 Extended 类中也被覆盖。

被覆盖的 setter 看起来像这样:

override public function set a(value:Object):void
{
    doSomethingWithValue(value);
    super.a = value;
    doSometingExtraWithValue(value);
}

现在来看看发生的魔法:每当调用被覆盖的 setter 时,在super.a = value被执行的那一刻,被覆盖的 getter 被无缘无故地调用。

为什么,是个问题。没有任何规则说“调用setter时调用getter”,是吗?

4

1 回答 1

0

As3没有这种潜规则。有两种简单的方法可以找出发生了什么:

  • 在 Flash 调试器中使用断点(在 Flash Develop 或 Flash Builder 示例中可用)。只需在你的 getter 中添加这个断点,你就会拥有堆栈跟踪,并且可以与之交互。
  • 在您的 getter 中添加以下代码,您将拥有堆栈跟踪,您将找到触发的 getter 调用:

    跟踪(新错误()。getStackTrace());

于 2013-05-28T12:05:44.277 回答