Как получить повторяемый объект со свойствами функции? - PullRequest
0 голосов
/ 27 августа 2018

Может потребоваться доступ ко всем свойствам объекта в случае использования объектов JavaScript для описания « привязки » данных к представлению пользовательского интерфейса.

Реальный вариант использования может создавать динамически изменяемое поле редактирования. enter image description here

Есть ли способ получить объект, содержащий все поля функций (без функций и объектов)?

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) {

    }
}

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

вам просто нужно использовать оператор "typeof" -

for(var prop in obj){
if((typeof obj[prop] !== 'object') && (typeof obj[prop] !== 'function')){
 // do whatever you want
}}
0 голосов
/ 27 августа 2018

Вы можете легко определить, ссылается ли свойство на функцию в цикле for-in:

for (var name in object) {
    if (typeof object[name] === "function") {
        // It's a function
    } else {
        // It isn't
    }
}

(Раньше были проблемы в старых браузерах, где некоторые функции, предоставляемые браузером, говорили "object"вместо "function", но теперь они устарели.)

Вы также можете определить, относится ли это к объекту, используя === "object" вместо === "function".

Это не ясноиз вашего вопроса, что вы хотите (имена свойств, новый объект только с подмножеством свойств) и хотите ли вы / не хотите функции и объекты, но это должно заставить вас указать правильный путь.

Подробнее о typeof в 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 там, потому что вы упомянули о желании посетить унаследованные свойства.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...