Speaking as someone who's dabbled in Lua OOP and ultimately mostly given it up except where absolutely necessary, I'd strongly advise against trying to arbitrarily apply any particular programming paradigm to Lua, especially OO. This is because Lua is a very simple language, and the words we use to describe what we're doing in OOP tend to be misleading.
For instance, we might say we want to make a constructor method on an object, but in Lua, that's not really what you're doing. You're just making a table, putting a copying function inside of it, and maybe pointing the __index metamethod for that table to itself. It's a subtle distinction, but an important one to keep in mind. There's only tables, and functions, and that's it.
__index is called when you try to make reference to a table element that isn't there, it describes where to look for that information. You can talk about this as if it's class behavior, but it's really not. And where and how you define the metamethods can be crucial.
I would recommend, as a reliable way to get started, look into writing a copying function instead. There's no built-in "copy table" function in Lua, and coding one yourself would be an excellent way to learn more about the little particulars of the language, which could help prime you to think about metamethods, functions and upvalues, all that sort of thing as well.
In your particular code example, I've never used MGL myself, but I can tell you that your colon syntax in that initial function definition looks a bit odd to me. You don't really want to use that when defining the function; rather, it's "syntactic sugar" for when you CALL that function later. The documentation on this in PIL is a bit misleading, actually. It's so concise that it's maybe unintentionally obscure or too dense.
You could also check out this thread, where I struggled with this same issue and got some good solutions:
https://love2d.org/forums/viewtopic.php?f=4&t=91635