调用super.setter会毫无理由地调用getter

时间:2013-05-28 11:26:00

标签: actionscript-3 flash flex flex4 flex4.5

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

“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”,有吗?

1 个答案:

答案 0 :(得分:0)

在As3中没有类似的隐藏规则。 有两种简单的方法可以找出发生的情况:

  • 在Flash Debugger中使用断点(可在Flash Develop或Flash Builder中使用)。 只需在你的getter中添加这个断点,这样你就可以使用堆栈跟踪,并且可以与它进行交互。
  • 在你的getter中添加以下代码,你将拥有stacktrace,你会发现触发getter调用的内容:

    trace(new Error()。getStackTrace());