无法从函数内引用对象 - adobe animate canvas
Posted
技术标签:
【中文标题】无法从函数内引用对象 - adobe animate canvas【英文标题】:Trouble referencing object from within function - adobe animate canvas 【发布时间】:2016-07-08 22:17:20 【问题描述】:我无法获得引用舞台上影片剪辑的函数 (thatsRight
)。我可以在函数外部引用它以将其初始设置为visible = false
,并在this.Correct
函数内部将其设置为可见= true,但调用另一个函数this.removeAndCheck
无法在舞台上引用相同的影片剪辑。我收到错误
"TypeError: undefined is not an object (评估 'this.thatsRight.visible = false')"
就行中的this.removeAndCheck函数。这对我来说没有意义。一个函数可以引用影片剪辑,但另一个不能。此代码在框架上。
this.thatsRight.visible = false;
this.Correct = function()
this.thatsRight.visible = true;
setTimeout(this.removeAndCheck, 3000)
this.removeAndCheck = function()
this.thatsRight.visible = false;
this.CheckAllCorrect();
我也对调用 this.CheckAllCorrect() 有疑问。 this.CheckAllCorrect()
也在一个操作层上,但在另一个操作层上。
这是使用 adobe animate CC 将不同的 as3 flash 资源转换为 html5 画布资源的一部分。对此的任何帮助将不胜感激。
【问题讨论】:
不确定画布在 Adobe Animate 上的工作方式,但我想您应该在 settimeout 方法中传递“this”参数,然后在那里访问它。例如 setTimeout(this.removeAndCheck, 3000, this) 然后 this.removeAndCheck = function( value )。 “value”参数将持有对“this”的引用 仅供参考,这不是 AS3,它只是 JS。我将删除[actionscript-3]
标签。
【参考方案1】:
这是this
变量值的范围问题,这是javascript 中的常见错误。要完全避免这些问题,只需使用箭头函数即可:
this.thatsRight.visible = false;
this.removeAndCheck = () =>
this.thatsRight.visible = false;
this.CheckAllCorrect();
this.Correct = () =>
this.thatsRight.visible = true;
setTimeout(this.removeAndCheck, 3000)
【讨论】:
【参考方案2】:@Sammeer 是正确的,这是一个范围界定问题。通常我会使用Function.bind
setTimeout(this.removeAndCheck.bind(this), 3000);
您可能还会看到像这样的局部变量绑定:
var that = this;
setTimeout(function() that.removeAndCheck(); , 3000);
这里有一些further reading。
【讨论】:
以上是关于无法从函数内引用对象 - adobe animate canvas的主要内容,如果未能解决你的问题,请参考以下文章
无法使用带有 redux-toolkit 的 socketIO 获取对象内函数的值