CreateJS瞄准mc范围问题

问题描述:

在Adobe AnimateCC使用CreateJS我有一帧的一个叫做disclaimer_btn,并在第一帧的mc被称为discTxt。我希望能够在discTxt的帧标签上mouseover disclaimer_btn和gotoAndStop。四舍五入150我试图做mouseover,它不工作。如果我在我的功能中使用了一个警告框,那就行了。CreateJS瞄准mc范围问题

的错误是Uncaught TypeError: Cannot read property 'bind' of undefined并在代码它指向了这里.bind(this));

如果我从this.discTxt.fl_MouseOverHandler.bind(this));之前,我得到的错误Uncaught ReferenceError: fl_MouseOverHandler is not defined删除this.discTxt

我已阅读this SO postthis one,这些解决方案在这种情况下不适用于我。

我得到这是一个范围的问题,我在这里做错了什么?

var frequency = 3; 
stage.enableMouseOver(frequency); 
this.disclaimer_btn.addEventListener("mouseover", this.discTxt.fl_MouseOverHandler.bind(this)); 

this.fl_MouseOverHandler = function() 
{ 
    this.discTxt.gotoAndStop("on"); 

} 

这只是订单的一个问题。因为你必须定义在this功能作为变量,函数定义不是“红旗”。悬挂功能得到第一个定义,无论他们是在代码中定义的顺序。

// Hoisted 
function myFunction() {} 

// Not hoisted 
var myFunction = function() {} 
this.myFunction = function() {} 

在第二个例子,变量本身是被定义的,但它会一直为空,直到你设置它的行为止,你可以通过将addEventListener移动到该行的下面来修复它,以便在函数被定义后调用它。

或者,更改为托管方法,并绑定:

btn.addEventListener("click", myFunction.bind(this)); 
function myFunction() {} 

你也可以使用on,这是一个CreateJS函数替换为addEventListener,它有一些语法糖,比如scope参数。

btn.on("click", myFunction, this); 

最后,如果你定义使用this功能,确保您传递正确的价值。在你的例子中,你定义了this的函数,但是把它作为this.discTxt的一个属性传递。除非this.discTxt是另一个MovieClip,并且该函数是在那里定义的,否则您将传递null。

TLDR:

  • 如果定义了功能上this的属性,然后将它下面的`的addEventListener
  • 或改变它,因此函数使用function myFunction()定义,并将其绑定。