Современный Javascript на помощь!
Это может не иметь большого шанса быть замеченным с длинным списком ответов, но теперь это решается * на уровне языка с новым необязательным синтаксисом цепочки
me.onChange?.(str)
Это так просто - onChange
вызывается, только если он существует .
Если onChange
не существует, ничего не происходит, и выражение возвращается undefined
- поэтому, если оно имеет возвращаемое значение, которое вы использовали бы в противном случае, вы можете просто проверить это значение!== undefined
прежде чем продолжить.
Предостережение о крайнем случае - если onChange
оно существует, но не является функцией, вы получаете TypeError
. Как и следовало ожидать, это то же самое, что пытаться вызывать любую не-функцию как функцию, но стоит явно указать, что Optional Chaining не делает никакой магии, чтобы убрать это.
* Ну, технически говоря, Optional Chaining все еще является предложением TC39 4-го этапа, поэтому пока еще не включен в спецификацию ECMAScript, но 4-й этап означает, что он завершен и его включение по существу гарантировано, он просто ожидает поставки новой версии. Вы можете использовать синтаксис в его окончательной версии сегодня через Babel с уверенностью, что он не изменится. Это даже в Typescript!