在使用JavaScript对象将“ 绑定”数据描述到UI视图的情况下,可能有必要访问该对象的所有属性。
有没有办法获取包含所有功能字段(没有功能和对象)的对象?
function Airplane() {
_id,
_cruiserSpeed,
_maxWeightCapacity,
_maxFlightHeight,
_fuelState,
_airCompanyOwner,
_seats = []
this.fly = function(departurePoint, destinationPoint) {
}
}
这样我们就可以像这样遍历它们。
for (var field in context.fields) {
}
语言是否普遍支持这种反映? (可能是 proto 属性之一)
现在,找出的唯一解决方案是使用嵌套对象。但这会增加对属性的简单访问的复杂性( context._id 是 context._fields._id )。
function Airplane() {
this._fields = {
_id,
_cruiserSpeed,
_maxWeightCapacity,
_maxFlightHeight,
_fuelState,
_airCompanyOwner,
_seats = []
}
this.fly = function(departurePoint, destinationPoint) {
}
}
答案 0 :(得分:3)
您可以轻松判断属性是否在for-in
循环中引用了一个函数:
for (var name in object) {
if (typeof object[name] === "function") {
// It's a function
} else {
// It isn't
}
}
(在旧的浏览器中曾经出现过这样的问题,浏览器提供的某些功能用"object"
代替了"function"
,但现在已经过时了。)
您还可以使用=== "object"
而不是=== "function"
来判断它是否引用了对象。
从您的问题中尚不清楚您想要什么(属性名称,仅包含属性子集的新对象)以及是否需要/不希望使用函数和对象,但这应该可以使您指出正确的方法
例如,如果您想要一个不包含函数或对象的属性名称数组:
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
,因为您提到要访问继承的属性。)
答案 1 :(得分:-1)
您只需要使用“ typeof”运算符-
for(var prop in obj){
if((typeof obj[prop] !== 'object') && (typeof obj[prop] !== 'function')){
// do whatever you want
}}