我有一个名为“target”的对象,其中包含一个名为“move”的属性:
private function start() {
var movement:IMovement = new ZigZagMovement(target);
target.movement = movement;
mediumDifficulty();
}
private function mediumDifficulty(target:AbstractTarget):void {
var movement:IMovement = target.movement;
movement.mediumMove();
}
我的抽象目标类如下所示:
package
{
import flash.display.Sprite;
public class AbstractTarget extends Sprite
{
protected var __movement:IMovement;
public function AbstractTarget()
{
}
public function set movement(value:IMovement):void
{
__movement = value;
}
public function get movement():IMovement
{
return __movement;
}
}
}
我的“运动”课程如下:
package {
import flash.events.Event;
public class ZigZagMovement implements IMovement
{
private var __target:Object;
public function ZigZagMovement(target:Object)
{
__target = target;
}
public function mediumMove():void
{
// movement code
}
}
}
奇怪的是,当我追踪“目标”和“target.movement”时,我得到了我想要的东西......但如果我试着说,请写:
target.movement.mediumMove();
OR
movement.mediumMove()
;
然后目标和“运动”(局部变量)都追溯到null ??
答案 0 :(得分:1)
我认为我们需要更多信息。在代码示例或解释中有一些我没有看到的东西:
听起来正如发生的那样,您正在单独测试的AbstractTarget子类有一个IMovement,但不是您传递给mediumDifficulty函数的那个,但是没有更多的信息很难说。
(将此设置为社区维基,以防我遗漏某些内容)
编辑:使用新信息 -
看来你有一个名为“target”的类级变量,你正在为你的运动分配你的运动,并且你在mediumDifficulty()函数签名中也有一个名为“target”的参数,而你是实际上没有将您的类级目标对象传递给函数。这导致的是当mediumDifficulty试图确定目标的值时,它是null,因为它正在查看param而不是类级变量。这可能是你如何设法在start()函数中跟踪目标和target.movement但在mediumDifficulty中没有得到任何值。
将来尝试使用函数参数或函数范围变量而不是与类范围的变量共享名称以减少这种混淆。