[]执行回调函数时报is not a function

解压缩laya_game.rar,双击打开laya_game\hgameStarter\bin\h5目录下的index.html,待浏览器打开后,打开开发者工具查看:

p622.png

 
 Main.as里把getRolesBack函数作为回调函数传给SocketProxy.as setRoleCall,但是回调回来执行getRolesBack的时候,loadCreateRole()报错:this.loadCreateRole is not a function。
回调函数里的函数执行不了吗?求解决办法。//Main.as
private function loadRoles():void
{
    SocketProxy.instance.setRoleCall(getRolesBack);
}

protected function getRolesBack(data:ByteArray):void
{
    var len:int=data.readShort();
    if (len == 0)
    { //没有角色...则开始创建
        trace("#没有角色...则开始创建");
        _allRegisterComplete=false;
        _isFirstLogin=true;
        loadCreateRole();
    }
}

//SocketProxy.as
public function setRoleCall(callback:Function):void
{
    callback(data);
}
已邀请:

cuixueying

赞同来自: wwxinqq

你这个问题是由于作用域错误导致的

222.png

正确的this,应该指向MhsgStarter,现在是window
修改方式有2个,你可以参考下
1、传参的时候不要传function,可以考虑传一个Handler
			SocketProxy.instance.getRoleData(Handler.create(this,getRolesBack,[str]));
}

protected function getRolesBack(data:String):void
{
trace("#getRolesBack");
loadCreateRole(data);
}
		public function getRoleData(callback:Handler):void
{
callback.runWith(["123"]);
}
2、直接传一个函数体过去
			SocketProxy.instance.getRoleData(function getRolesBack(data:String):void
{
trace("#getRolesBack");
loadCreateRole(data);
});

 

cuixueying

赞同来自:

能否提供一个可以运行的重现问题的精简的小例子呢,我们看下什么原因!

wwxinqq

赞同来自:

@cuixueying, 我重新编辑了问题。在开始我加了问题重现的说明。另外也上传了可以重现问题的附件。

该问题目前已经被锁定, 无法添加新回复

商务合作
商务合作