Почему typeof пропускает функцию в цикле for in?

217
11 ноября 2017, 14:31
AbstractProduct.prototype.getFullInformation = function() {
    var str = "";
    for (var key in this) {
        if(this.hasOwnProperty(key) && typeof (key) !== "function"){
          console.log(typeof key);
            str += " " + key + ":" + this[key] + " \n";
        }
    }
    return str;
};

function Clothes(param) {
    this.ID = param.ID;
    this.name = param.name; 
    this.description = param.descrip; 
    this.price = param.price;
    this.images = param.images;
    this.reviews = param.reviews;
    this.bla = function() {
      return "tratata";
    }
}

Есть метод который перебирает объект и записывает только свои свойства, без методов. Но проверка typeof на функцию не работает, и метод тоже записывается. Почему? И как это исправить ?

console.log( lunar.getFullInformation() );
вывод должен быть вот такой, только без метода в конце, только свойства.

ID:15 
 name:pants 
 description:bla bla 
 price:201.5 
 images:image1,image2 
 material:poliester 
 color:navy 
 brand:puma 
 sizes:XS,S,M,L,XL,XXL 
 activeSize:S 
 quantity:5 
 date:Sun Feb 10 2013 00:00:00 GMT+0200 (Финляндия (зима)) 
 reviews:[object Object],[object Object],[object Object] 
 bla:function () {
        console.log("Sda");
    } 
Answer 1

Как указано в описании

for (variable in object) { ...
}

variable - различные имена свойств присваиваемые переменной на каждой итерации.

Имена свойств - это строки, таким образом, тип переменной key в вопросе всегда "string".

Так как нужно проверить тип свойства, сначала его нужно получить по указанному ключу key и только потом проверять.

for (var key in this) {
    if(this.hasOwnProperty(key) && typeof (this[key]) !== "function"){
        str += " " + key + ":" + this[key] + " \n";
    }
}
READ ALSO
Не работают события keyup/keypress/keydown

Не работают события keyup/keypress/keydown

Необходимо сделать следующий функционал, чтобы при вводе символов с клавиатуры в input вызывалось модальное окно и то что юзер ввел в первом...

321
Не работают breakpoint в slick slider

Не работают breakpoint в slick slider

Добрый день друзья, у меня проблема с адаптацией моего слайдера

820
Хранение сессий в бд. php

Хранение сессий в бд. php

Всем привет!

231
Работа BotMan с “чистым” Laravel/PHP

Работа BotMan с “чистым” Laravel/PHP

Всем привет :) Мне дали задачу создать telegram бота при помощи https://botmanio и Laravel

279