LayaAir Laya.Handle.create

本文通过一个实例展示了在使用 Laya.Handler 进行回调操作时可能出现的死循环问题及原因,并提供了一种利用 JavaScript 的 bind 方法解决该问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Laya也有一年了。其中遇到的问题也是不少的。这里记录一下问题。可能对大家有帮助。

laya.utils.Handler

Laya.Handler 这个类使用的非常多。 一般一次性的操作需要透传我都会使用 Laya.Handler.create() 这个方法进行透传 回调。

最近做的一个战斗里面普遍使用到了这种回调。突然出现死循环

出一个例子:

代码:
var call =  Laya.Handler.create(this,function(){
	console.log("我是A")
})
console.log("执行前call地址:",call)
call.run();
console.log("执行后call地址:",call)
var call2 =  Laya.Handler.create(this,function(){
	console.log("我是B")
}) 
console.log("创建call2后call地址:",call)
console.log("执行call前call2地址:",call2)
call.run()
console.log("执行call后call2地址:",call2)

打印结果:
执行前call地址: Handler {once: true, _id: 1, caller: global, args: undefined}
我是A
执行后call地址: Handler {once: true, _id: 0, caller: null, method: null, args: null}
创建call2后call地址: Handler {once: true, _id: 2, caller: global, args: undefined}
执行call前call2地址: Handler {once: true, _id: 2, caller: global, args: undefined}
我是B
执行call后call2地址: Handler {once: true, _id: 0, caller: null, method: null, args: null}

惊不惊喜。意不意外。 哈哈哈哈  千万别保留引用否则很有可能在执行的时候出现各种奇怪的问题。

解决方案可以使用  js的 bind 方法

 

//假装创建一个作用域
var tabel = {
	a:function(){  
		console.log("假装打印") 
	},
	b:"我是一个数据"
} 

//执行table域的a函数
tabel.a()

//没绑定之前
var func = function(x,y,z){
	//如果这个函数想要访问tabel.b的属性 可以把a的是作用域保留到这个函数
	console.log("绑定域函数内",this === tabel)
	console.log("也可以带参数",x+"="+y+"="+z)
	console.log("打印b",this.b)
}

//执行func没绑定table域函数
func(1,2,5000)


//绑定table 域给函数
var func2 = function(x,y,z){
	//如果这个函数想要访问tabel.b的属性 可以把a的是作用域保留到这个函数
	console.log("绑定域函数内",this === tabel)
	console.log("也可以带参数",x+"="+y+"="+z)
	console.log("打印b",this.b)
}.bind(tabel,1,2) 

//执行func2绑定
func2(5000)


结果:
假装打印 

绑定域函数内 false
也可以带参数 1=2=5000
打印b undefined

绑定域函数内 true
也可以带参数 1=2=5000
打印b 我是一个数据

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值