2016-06-08 3 views
0

Правильно ли это проверить наличие функции и запустить ее, если она есть?Проверить, существует ли функция, а затем запустить ее

this.functions.SomeFunction && this.functions.SomeFunction(); 

Я бы предпочел, чтобы проверить, так просто, как

if (this.functions.SomeFunction) {this.functions.SomeFunction()} 

, но я увидел первый пример в коде 3 партии и интересно, если это хорошая практика, или если он создан по какой-то причине, как, что ?

+0

Я думаю, что первый пример недостаточно ясен. Если другой разработчик прочитает ваш код, во втором варианте будет проще. –

+0

Все функции в JavaScript являются объектами первого класса, поэтому они являются экземпляром 'Object', который под обложками является экземпляром' Function'. Так что достаточно честно проверить 'typeof' или' this.functions.SomeFunction instanceof Object' или 'this.functions.SomeFunction instanceof Function' было бы лучше. – Rohit416

+0

Основываясь на мысли «что, черт возьми, что-то, кроме функции, будет делать в' this.functions', я бы безопасно сделал первый. Если я все еще в конечном итоге что-то взорваюсь на моем лице, это определенно не оператор '&&'. – Redu

ответ

0

Оба делают почти то же самое. Это красота оператора &&. Он выполняет только второй condition, если первый condition является истинным.

1

Вы можете использовать typeof сделать:

if (typeof(theFunction) === "function") { 
    theFunction.apply(this); 
} 
1

Если вы хотите, чтобы убедиться, что функция определена и что это действительно функция, которую вы можете сделать следующее:

if (typeof this.functions.SomeFunction == 'function') { 
    this.functions.SomeFunction(); 
} 
0

Было бы лучше проверить тип объекта, а не полагаться на то, что он правдивый. Итак: typeof this.functions.SomeFunction === 'function' && this.functions.SomeFunction(). Метод && является просто сокращенным и довольно распространенным/широко распространенным. Из-за логической логики он не проверяет следующее выражение, если первое является ложным. И JavaScript вернет вам последний результат определенного булевского выражения.

0

Что я предпочитаю и использовать в производстве код

if (typeof this.functions.SomeFunction === 'function') { 
    this.functions.SomeFunction() 
} 

Может быть, лучше:

const { SomeFunction } = this.functions 
if (typeof SomeFunction === 'function') { 
    SomeFunction() 
} 

И мы должны убедиться, что this.functions существуют точно.

0

Оба являются технически правильными, но, на мой взгляд, вторая версия лучше, поскольку это более понятно.

Кроме того, вы действительно должны быть уверены, что SomeFunction на самом деле является функцией, позволяющей ее вызывать. В вашем случае ясно, как он относится к объекту «functions».

0

Попробуйте это, если вы хотите, чтобы проверить наличие функции

if(typeof SomeFunction == 'function') 
    SomeFunction(); 
0

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

Существует больше кодирования, чем «умный». Лично я бы сказал, что для ввода второй версии требуется всего лишь немного времени, но она более читаема, легче отлаживается или помещается в точку останова и проще масштабируется, когда вы понимаете, что хотите добавить другую команду после оператора if.

Пока вы и все, используя свой код, знаете, почему первый вариант имеет тот же результат, что и второй, тогда это ваш выбор. Но я потерял счет количества раз, когда я сделал умный бит стенографии, а затем должен был превратить его в старомодное, если бы заявление в течение нескольких минут, чтобы понять, почему он не стреляет правильно.

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