我一直在研究 JavaScript 中反射的可能性。我已经有一个简单的反射器,可以列出对象/函数的成员,如下所示:
window["Foo"] = {
"Bar": {
"Test": function () {
this.x = 32;
this._hello = "Hello World";
this._item = 123.345;
this.hello = function() {
alert("hello");
};
this.goodbye = function() {
alert("goodbye");
}
}
}
}
$(document).ready(function () {
var x = new Foo.Bar.Test();
Reflect(new Foo.Bar.Test());
});
function Reflect(obj) {
for (var item in obj) {
$("body").append(item + "(" + typeof obj[item] + ") = " + obj[item] + "<br />");
}
}
结果:
x(数字) = 32
_hello(string) = 你好世界
_item(number) = 123.345
你好(函数)=函数(){警报(“你好”);}
再见(函数)=函数(){警报(“再见”);}
我挑战的下一部分是构建可以反映(如果可能)对象名称和对象路径的东西。
使用这个例子:...
var x = new Foo.Bar.Test();
如何从 x 反映“测试”?例如:
ReflectName(x); //returns "Test";
另外我怎样才能反映到x的路径?例如:
ReflectPath(x) //returns Foo.Bar.Test
是否可以使用 JavaScript 完成这两件事?我对此进行了研究,到目前为止还没有设法提出任何可行的解决方案。
我不想要一个需要硬编码对象/函数的名称和路径的解决方案,因为这会破坏使用反射的意义。