首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >索引JS对象,就像Lua中的Metatable

索引JS对象,就像Lua中的Metatable
EN

Stack Overflow用户
提问于 2022-07-12 15:47:48
回答 1查看 41关注 0票数 0

有没有一种方法可以像Lua中的JavaScript中的元可那样索引对象?

例如:

代码语言:javascript
复制
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"

对于LMD:如何对多个对象执行此操作?例如:

代码语言:javascript
复制
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"
EN

回答 1

Stack Overflow用户

发布于 2022-07-12 15:52:51

是的: JavaScript有原型。它们与Lua不完全相同,但可以用于简单的元索引目的。实现您的示例的一个方法如下:

代码语言:javascript
复制
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"

或者,如果您已经给出了对象,如第二个示例所示,您可能希望使用Object.setPrototypeOf(object, prototype),这与Lua中的setmetatable(object, {__index = prototype})类似:

代码语言:javascript
复制
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"

也就是说,您一直在搜索的metatable函数实际上是Object.setPrototypeOf

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72955059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档