我遇到了 JavaScript 中属性反射的一小段代码:
function GetProperties(obj) {
var result = [];
for (var prop in obj) {
if (typeof obj[prop] !== "function") {
result.push(prop);
}
}
return result;
}
我已经使用以下“CustomObject”对其进行了测试:
var CustomObject = (function () {
function CustomObject() {
this.message = "Hello World";
this.id = 1234;
}
Object.defineProperty(CustomObject.prototype, "Foo", {
get: function () {
return "foo";
},
enumerable: true,
configurable: true
});
Object.defineProperty(CustomObject.prototype, "Bar", {
get: function () {
return "bar";
},
enumerable: true,
configurable: true
});
return CustomObject;
})();
这是一个使用 jQuery 的小测试:
$(document).ready(function () {
console.log(GetProperties(new CustomObject()));
});
结果如下:
["message", "id", "Foo", "Bar"]
我知道 GetProperties 函数只返回输入对象中不是函数的任何内容的数组,但我想过滤结果以仅获取“真实”属性,所以我的输出应该是:
["Foo", "Bar"]
这可能吗?
另外,我可以做相反的事情并返回字段吗?