我尝试在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);
}
。
答案 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
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;
答案 2 :(得分:-2)
在现代浏览器中,您可以使用Proxy:
实现这一目标这是一个实现你所描述的例子:
const o = new Proxy({}, {
get(obj, name) {
return () => name
}
});
在特定情况下,您没有想要的原始对象&#34;代理&#34;,但您可能希望在上面的链接上阅读更多内容,以添加您想要的所有陷阱。< / p>