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 post和this 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()
定义,并将其绑定。