Перебор свойств объекта за исключением его методов

133
28 ноября 2018, 01:30

Есть объект с информацией о пользователе. В объекте есть метод, который собирает всю информацию о пользователе перебором его свойств. Нужно сделать так, чтобы перебирались все ключи объекта, за исключением тех, которые являются его методами.

'use strict'; 
 
let user = { 
    name: 'Alex', 
    forname: 'Terel', 
    yearOfBirth: 1985, 
    actualYear: 2018, 
    age: 32,  
    land: 'Belarus', 
    city: 'Minsk', 
    street: 'Victory', 
    building: 76, 
    calcIn: function(){ 
        let info = '' 
        for(let key in user){ 
            info += this[key] + '.'; 
            if(typeof this[key] === 'function') break; 
             
             
        } 
            console.log(info) 
    } 
} 
user.calcIn(); 
console.log(typeof user.calcIn)

Answer 1

Вы не правильно break используете, да и используете его уже после того, как ключ прибавили к результату

'use strict'; 
 
let user = { 
    name: 'Alex', 
    forname: 'Terel', 
    yearOfBirth: 1985, 
    actualYear: 2018, 
    age: 32,  
    land: 'Belarus', 
    city: 'Minsk', 
    street: 'Victory', 
    building: 76, 
    calcIn: function(){ 
        const result = Object.keys(this) 
            .filter(key => typeof this[key] !== 'function') 
        console.log(result); 
    } 
} 
user.calcIn();

Answer 2

Object.defineProperty(obj, prop, descriptor)

Он позволяет объявить свойство(prop) объекта(obj) и, что самое главное, тонко настроить его особые аспекты, которые никак иначе не изменить.

descriptor:

enumerable – если true, то свойство просматривается в цикле for..in и методе Object.keys().

'use strict'; 
 
let user = { 
    name: 'Alex', 
    forname: 'Terel', 
    yearOfBirth: 1985, 
    actualYear: 2018, 
    age: 32,  
    land: 'Belarus', 
    city: 'Minsk', 
    street: 'Victory', 
    building: 76, 
    calcIn: function(){ 
        let info = '' 
        for(let key in user){ 
            info += this[key] + '.'; 
            if(typeof this[key] === 'function') break; 
             
             
        } 
            console.log(info) 
    } 
} 
Object.defineProperty(user, "calcIn", {enumerable: false}) 
user.calcIn(); 
console.log(typeof user.calcIn)

READ ALSO
Как сделать тепловой след от курсора

Как сделать тепловой след от курсора

Не могу понять, как сделать такой же тепловой след от курсора тепловой след появляется на верхнем блоке

158
Owl Carousel 2 и lightbox 2 - проблема клонирования элементов в режиме loop

Owl Carousel 2 и lightbox 2 - проблема клонирования элементов в режиме loop

Столкнулся с такой вот проблемой и пока что никак не могу её решить

140
Custom select option [закрыт]

Custom select option [закрыт]

Подскажите как кастомизировать select>option ? Понимаю что напрямую это не сделать, направьте тогда проверенный плагин для этого

154
Как динамически подключать и отключать JS-скрипты?

Как динамически подключать и отключать JS-скрипты?

Есть проект в формате SPA, хочу реализовать на нем динамическое подключение и отключение скриптовС подключением все просто:

168