在JavaScript中传递多个可选参数
2014-8-19 14:6:24
收藏:0
阅读:87
评论:2
在 Lua 中,我已经制作了自己的事件系统并希望将其转换并在 JavaScript 中使用,以下是 Lua 代码:
TriggerEvent = function(Name, ...)
local EventID = nil;
for Event2ID, Table in pairs(Event) do
if(Table.Active and Table.Name == Name) then
EventID = Event2ID;
break;
end
end
if(EventID == nil) then
return false;
end
for ListenerID, Table in pairs(Event[EventID].Listener) do
if(Table.Active) then
Table.Function(...);
end
end
return true;
end
它可以完美工作。 以下是 JavaScript 代码:
TriggerEvent = function(Name, ...) {
var
EventID = undefined
;
for(Event2ID = 0, Length = Event.length; Event2ID < Length; Event2ID++) {
if(Event[Event2ID].Active && Event[Event2ID].Name == Name) {
EventID = Event2ID;
break;
}
}
if(EventID == undefined) {
return false;
}
for(ListenerID = 0, Length = Event[EventID].Listener.length; ListenerID < Length; ListenerID++) {
if(Event[EventID].Listener[ListenerID].Active) {
Event[EventID].Listener[ListenerID].Function(...);
}
}
return true;
}
它完全无法工作。
示例用法:
WebsiteConnected = function(Website, Test) {
Website.SetTitle("Hello World");
console.log(Website.GetTitle() + " connected! " + Test);
return true;
}
CreateEvent("WebsiteConnected"); // 移至下面。
AddEventListener("WebsiteConnected", WebsiteConnected);
TriggerEvent("WebsiteConnected", (Website || {}), "Test"); // 移至下面。
点赞
用户2893193
我对之前所请求的方法进行了一些变通,这里是我的系统:
// ------------------------------------------------------------------------------------------------- Event "Class"
Event = function() {
var
Public = this,
Private = {}
;
Public.Create = function(Name) {
if(Private.Created) {
return false;
}
Private.Created = true;
Private.Name = Name;
Private.Function = [];
return true;
}
Public.Delete = function() {
if(! Private.Created) {
return false;
}
Private = {};
Private.Created = false;
return true;
}
Public.IsCreated = function() {
if(! Private.Created) {
return false;
}
return true;
}
Public.SetName = function(Name) {
if(! Private.Created) {
return false;
}
Private.Name = Name;
return true;
}
Public.GetName = function() {
var
Name = ""
;
if(! Private.Created) {
return Name;
}
Name = Private.Name;
return Name;
}
Public.AddFunction = function(Function) {
if(! Private.Created) {
return false;
}
for(var FunctionID = 0, Length = Private.Function.length; FunctionID < Length; FunctionID++) {
if(Private.Function[FunctionID] == Function) {
return false;
}
}
Private.Function[Private.Function.length] = Function;
return true;
}
Public.HasFunction = function(Function) {
if(! Private.Created) {
return false;
}
for(var FunctionID = 0, Length = Private.Function.length; FunctionID < Length; FunctionID++) {
if(Private.Function[FunctionID] == Function) {
return true;
}
}
return false;
}
Public.Call = function() {
if(! Private.Created) {
return false;
}
var
Arguments = ""
;
for(var argumentID = 0, Length = arguments.length; argumentID < Length; argumentID++) {
Arguments += "arguments[" + argumentID + "]";
if(argumentID != (arguments.length - 1)) {
Arguments += ", ";
}
}
for(var FunctionID = 0, Length = Private.Function.length; FunctionID < Length; FunctionID++) {
eval("Private.Function[FunctionID](" + Arguments + ")");
}
return false;
}
Public.Create(arguments[0]);
return Public;
}
var
TestEvent = new Event("TestEvent")
;
TestEvent.AddFunction(
function() {
console.log("TestEvent called.");
}
);
TestEvent.AddFunction(
function(String, String1) {
console.log(String1 + String);
}
);
TestEvent.Call("world!", "Hello ");
这个系统表现得非常完美。我已经做了很多基准测试。
2014-12-31 21:17:56
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
以下是 Javascript 中“可选”参数的工作方式:
如果您编写以下函数:
function doSomething(arg1, arg2, arg3) { // 在此处插入优质代码 :-) }在 Javascript 中调用此函数(或任何其他函数)使用_任何_数量的参数都是有效的。
如果您传递少于三个指定的参数,则其余的参数将默认为空。
如果您传递超过三个参数,则额外的参数将被忽略。
如果您想“重载”函数,在 Javascript 中没有这样的东西。如果一个函数需要接受一个参数的两种不同类型,那么函数必须检查传递的参数类型并相应地行事。
另外,有
arguments对象,它提供了一种类似数组的接口,用于传递给当前执行函数的参数。出于某种原因,在语言的开发中有一个小问题,即arguments对象的行为非常类似于数组,但它不是数组。 :-/