Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

委托与事件

huliangjie edited this page Sep 3, 2020 · 1 revision

委托

委托被包装为函数暴露给脚本, 通过第一个参数确定执行什么操作 add/remove/get/set

obj.OnSkill("add", cb); // 注册 (+=)
obj.OnSkill("set", cb); // 直接赋值 (=)
let n = obj.OnSkill("get");
console.log(n == cb);
obj.OnSkill("set", null); // 赋空值 = null

需要特别注意的, 当委托值实际是单一的 JS Function 构成, 那么get操作可以得到此 JS Function 本身, 但是当委托值是一个非 JS Function 或者是复合委托 (经过add/remove操作), 那么get将只能得到一个Delegate对象包装的object.

在单一值情况下, 你可以通过 jsb.ToFunction(obj.OnSkill("get")) 还原出 JS Function.

事件

事件与委托类似, 但只提供 add/remove 操作

例如:

public event Action<int> Clicked;

对应:

Clicked(op: "add" | "remove", fn: (obj: number) => void): void
let cb = function () {}

obj.Clicked("add", cb); // 注册 (+=)
obj.Clicked("remove", cb); // 反注册 (-=)
Clone this wiki locally