Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как проверить, что объект содержит не существующий метод?

Константин Ефименко Гуру (3721), закрыт 3 года назад
У меня есть код, который выглядит так:

$.fn.ChangeFocusBlur = function(dataAttr, obj={})
...
const countries = [];
for (let population in obj) {
if (obj.hasOwnProperty(population)) {
countries.push(population)
}
}
console.log(countries);
var checkAvailability = function(arr, val)
{
return arr.some(arrVal => val === arrVal);
}
console.log(!checkAvailability(countries, method));

Первая консоль возвращает 2 параметр, переданный в плагин, в качестве массива с набором ключей. Вторая консоль выдаёт false, если передан существующий метод и true, если которого нет.

Суть в том, что это работает, только если передавать в качестве аргумента только 1 из возможных методов.

Мне же необходимо, чтобы возвращалось true, если хотя бы 1 из методов не существует для плагина (всего 3, 'change', 'focus', 'blur').

Пример здесь:

https://jsfiddle.net/7oebw31a/
Дополнен 3 года назад
Я построил условие, которое на первый взгляд работает. Но как оказалось, теперь оно вызывается ровно каждый раз, когда я добавляю в литерал вторую функцию, вне зависимости его от названия.

Сейчас это выглядит так:

https://jsfiddle.net/3612oaqv/

Любые варианты решения? Помогите исправить ошибку и составить правильное условие.
Лучший ответ
Андрей Высший разум (422004) 3 года назад
Тебе же нужен просто поиск в массиве. Какой ещё some?

var checkAvailability = function(arr, val) {
return arr.includes(val);
}

или более старый вариант, работающий везде:

var checkAvailability = function(arr, val) {
return arr.indexOf(val) >= 0;
}
Константин ЕфименкоГуру (3721) 3 года назад
"Какой ещё some?"

Я бы предпочёл использовать includes(), просто не соображу что к чему.

В любом случае, каждый из этих способов, работает абсолютно одинаково. Мне же необходимо проверить, передан ли хоть из методов, которого у меня нет (вне зависимости от того, сколько их будет внутри объекта).
Константин ЕфименкоГуру (3721) 3 года назад
Вообщем, я построил такое условие:

if ((countries.length == 1) && (!checkAvailability(countries, method)))
{
console.log('error');
} else if ((countries.length > 1) && (!!checkAvailability(countries, method)))
{
console.log('error');
}

Вроде работает ровно:

https://jsfiddle.net/7rh0cudz/
Остальные ответы
хантемир мамытов Ученик (95) 3 года назад
up.loader
build.default
Константин ЕфименкоГуру (3721) 3 года назад
А вы уверенны, что в ту тему ответили? Потому что, я не понимаю это такое:

"up.loader
build.default"
хантемир мамытовУченик (95) 3 года назад
забудь)
Константин Ефименко Гуру (3721) Потрудитесь в следующий раз, отвечать только по теме вопроса.
Похожие вопросы