¿Hay alguna manera de indexar un objeto en JavaScript como Metatable en Lua?
Como por ejemplo:
var obj = {a:"a",b:"b",properties:{c:"c",d:"d"}} metatable(obj,obj.properties) // Make it so that if you try to index something that's not inside the object it will go to the parameter one console.log(obj.a) // "a" console.log(obj.c) // "c"Para LMD: ¿Cómo lo hago para múltiples objetos? Como por ejemplo:
var objs = [ obj1 = {name:"Button";class:"button";properties:{text:"Press this"}] ] for (i in objs){ metatable(objs[i],objs[i].properties) } console.log(objs.obj1.text) // "Press this"Sí: JavaScript tiene prototipos . Estos no son exactamente lo mismo que Lua, pero se pueden usar para fines simples de indexación de metatablas. Una forma de lograr su ejemplo sería la siguiente:
const properties = {c: "c", d: "d"} // prototype const obj = Object.create(properties) // create object with prototype obj.a = "a"; obj.b = "b"; console.log(obj.a) // "a" console.log(obj.c) // "c" O si ya tiene los objetos proporcionados, como en su segundo ejemplo, puede usar Object.setPrototypeOf(object, prototype) , que es comparable a setmetatable(object, {__index = prototype}) en Lua:
const objs = [{name:"Button", class:"button", properties: {text:"Press this"}}] for (const obj of objs) Object.setPrototypeOf(obj, obj.properties) console.log(objs[0].text) // "Press this" es decir, la función de metatable que ha estado buscando literalmente es Object.setPrototypeOf .