在使用JavaScript对象描述将数据“绑定”到UI视图的情况下,可能有必要访问该对象的所有属性。

实际用例可能正在构建可动态更改的编辑框。
javascript - 如何获得函数属性的可迭代对象?-LMLPHP

有什么方法可以获取包含所有功能字段的对象(没有功能和对象)?

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.keysObject.entries。)

09-16 18:24