Skip to content

Can't use constructors with JS interop #123

@qgcarver

Description

@qgcarver

If I try to pass in a function that takes in a constructor as a parameter, the closure I send in doesn't treat it that way.

lua.global.set("DOM",{
    new: (T=>{
        let Constructor = T;
        return (...a) => {
            let constructed = new Constructor(...a);
            return constructed;
        };
    }),
    window: window
    log: console.log
    exampleElement: document.getElementById("mycanvas")
}),

lua.doString(`
function f()
  local ImageConstructor = DOM.new(DOM.window.Image)
  DOM.log(ImageConstructor())
end
DOM.exampleElement.onclick = f
`)

I get an error saying n is not a constructor
I tried currying and saving a local as seen above to try to work around this, but it seems like there's some kind of wrapping going on that's preventing that from working.
It seems like a way to support constructors in the interop system itself would be good, (if it doesn't already exist and I just missed it.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions