1

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"); // Moved down.
AddEventListener("WebsiteConnected", WebsiteConnected);
TriggerEvent("WebsiteConnected", (Website || {}), "Test"); // Moved down.
4

2 に答える 2

2

Javascript で「オプションの」引数がどのように機能するかを次に示します。

次のような関数を書く場合:

function doSomething(arg1, arg2, arg3) {
    // Insert quality code here :-)
}

任意の数の引数を指定してこの関数 (またはその他の関数) を呼び出すことは有効な Javascript です。

指定された 3 つの引数よりも少ない引数を渡すと、残りの引数は既定で null になります。

3 つ以上の引数を渡した場合、余分な引数は無視されます。

関数を「オーバーロード」したい場合、Javascript にはそのようなものはありません。関数が 1 つのパラメーターに対して 2 つの異なる型を受け入れる必要がある場合、関数は渡されたものの型をチェックし、それに応じて動作する必要があります。

また、arguments現在実行中の関数に渡される引数に配列のようなインターフェイスを提供するオブジェクトもあります。何らかの理由で、argumentsオブジェクトが配列のように動作するが、配列ではないという言語の開発の癖がありました。:-/

于 2014-08-19T14:18:12.030 に答える