无法从函数内引用对象 - 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 画布资源的一部分。对此的任何帮助将不胜感激。

【问题讨论】:

不确定画布在 Adob​​e 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 获取对象内函数的值

js对象和继承总结

C++“警告:返回对临时的引用”——但事实并非如此

在R中的函数内取消引用参数

无法从导出的 firebase 函数中引用未导出的 firebase 函数

无法在 window.webpackJsonp 对象内的匿名函数上注入代码