在使用JavaScript对象描述将数据“绑定”到UI视图的情况下,可能有必要访问该对象的所有属性。
实际用例可能正在构建可动态更改的编辑框。
有什么方法可以获取包含所有功能字段的对象(没有功能和对象)?
function Airplane() {
_id,
_cruiserSpeed,
_maxWeightCapacity,
_maxFlightHeight,
_fuelState,
_airCompanyOwner,
_seats = []
this.fly = function(departurePoint, destinationPoint) {
}
}
这样我们就可以像这样遍历它们。
for (var field in context.fields) {
}
语言是否总体上支持这种反映? (可能是原始属性之一)
现在,找出的唯一解决方案是使用嵌套对象。但这增加了对属性的简单访问的复杂性(context._id为context._fields._id)。
function Airplane() {
this._fields = {
_id,
_cruiserSpeed,
_maxWeightCapacity,
_maxFlightHeight,
_fuelState,
_airCompanyOwner,
_seats = []
}
this.fly = function(departurePoint, destinationPoint) {
}
}
最佳答案
您可以轻松判断属性是否引用for-in
循环中的函数:
for (var name in object) {
if (typeof object[name] === "function") {
// It's a function
} else {
// It isn't
}
}
(在旧的浏览器中曾经出现过一些问题,其中浏览器提供的某些功能用
"object"
而不是"function"
表示,但是现在已经过时了。)您还可以通过使用
=== "object"
而不是=== "function"
来判断它是否指向对象。从您的问题中尚不清楚您想要什么(属性名称,一个仅包含属性子集的新对象)以及是否/不希望使用函数和对象,但是这应该为您指明正确的方向。
More about
typeof
on MDN。例如,如果您想要一个不包含函数或对象的属性名称数组:
var names = [];
for (var name in object) {
switch (typeof object[name]) {
case "function":
case "object":
break;
default:
names.push(name);
break;
}
(因为您提到要访问继承的属性,所以我不在这里使用
Object.keys
或Object.entries
。)