在Javascript中是否可以创建具有动态(未确定)属性/成员的对象?

时间:2018-06-11 12:09:27

标签: javascript object dynamic

我尝试在Javascript中实现这一点:

ExpandoObject

基本上,我事先并不知道所需的属性/成员名称,但取决于我返回的调用,有点类似于C#a.Foo = () => { return "Foo"; } (动态)。

是否可以在Javascript中创建这样的对象?

注意:我知道可以添加属性,但是,在我的情况下,我事先并不知道需要添加的属性。

Foo

这是不可能的,因为我不知道将需要public interface GitHubClient { String BASE_URL = "https://api.github.com/"; @GET("search/repositories") Call<GitHubRepo> getReposForSearchParam (@Query("q") String custom_search_param); }

3 个答案:

答案 0 :(得分:3)

你可以使用Proxy并通过返回一个关闭键的函数来实现getter。

var a = new Proxy({ baz: 42 }, {
        get: function (target, prop, receiver) {
            return prop in target
                ? () => target[prop]
                : () => prop;
        }
    });

console.log(a.Foo());    // Foo
console.log(a["Bar"]()); // Bar
console.log(a.baz());    // 42

答案 1 :(得分:0)

抱歉,我犯了一个错误,现在看一下片段;希望这是你正在研究的内容。

你现在可以检查片段。:D

&#13;
&#13;
let a = {}; // object
a.Foo = ()=> {return 'foo'};
a.Bar = ()=> {return 'bar'};

a.address = {}; // object inside object
a.address.houseno = '122';

console.log(a.Foo()); // Print Foo
console.log(a["Bar"]()); // Print Bar
console.log(a.address.houseno)
&#13;
&#13;
&#13;

答案 2 :(得分:-2)

在现代浏览器中,您可以使用Proxy

实现这一目标

这是一个实现你所描述的例子:

const o = new Proxy({}, {
  get(obj, name) {
    return () => name
  }
});

在特定情况下,您没有想要的原始对象&#34;代理&#34;,但您可能希望在上面的链接上阅读更多内容,以添加您想要的所有陷阱。< / p>