2016-04-15 3 views
1

У меня есть класс javascript, который передается ему, этот объект анонимен и изменяется. Я хочу проверить, есть ли в свойствах этого объекта имя соответствующего метода в этом классе.Проверьте, поддерживает ли Javascript определенный метод

Вот код, чтобы понять:

var Panel = function(obj) { 
 
    for (var prop in obj) { 
 
    if (typeOf this[prop] == function) { // ?? please help with this check 
 
     this[prop](obj[prop]); // call this method with right argument in this case will be this.maxWidth("400px") 
 
    } 
 
    } 
 

 
    this.maxWidth = function(max_width) { 
 
    document.getElementById(obj["id"]).style.maxWidth = max_width; 
 
    } 
 
} 
 

 

 
var myObj = { 
 
    "maxWidth": "400px" 
 
} 
 

 
var p = new Panel(myObj);

+3

Сделать его '' функцией "'. 'typeof' (строчный регистр!) возвращает строку. – Bergi

+0

поэтому ... после вышеуказанного комментария, ваша проблема ... –

+0

@ Bergi Я не получаю это решение. Не могли бы вы объяснить? –

ответ

1

Вот исправленный код, вам нужно использовать typeof не typeOf и function потребности быть завернуты в кавычки, так как typeof возвращает строка:

var Panel = function(obj) { 
    for (var prop in obj) { 
    if (typeof this[prop] == 'function') { // ?? please help with this check 
     this[prop](obj[prop]); // call this method with right argument in this case will be this.maxWidth("400px") 
    } 
    } 

    this.maxWidth = function(max_width) { 
    document.getElementById(obj.id).style.maxWidth = max_width; 
    }; 
}; 


var myObj = { 
    "maxWidth": "400px" 
}; 

var p = new Panel(myObj); 

https://jsbin.com/yemoki/1/edit?js,console

+1

Вы правы. Этот код работает после выполнения вышеупомянутого предложения путем добавления метода выше его вызова. Вот ссылка на код после внесенных изменений. Спасибо всем! https://jsfiddle.net/joeSaad/yavw0uo1/ –

Смежные вопросы