Нет, нет способа сделать это.
Это распространенный вопрос от разработчиков, которые переходят на JavaScript с другого языка, где операторы могут быть определены или переопределены для определенного типа.
В C ++ совершенно не исключено перегрузить operator*
на MyType
, заканчивая уникальным оператором звездочки для операций с объектами типа MyType
. Читаемость этой практики все еще может быть поставлена под сомнение, но язык, тем не менее, допускает это.
В JavaScript это просто невозможно. Вы не сможете определить метод, который позволяет индексировать символы из String
, используя скобки.
@ Lee Kowalkowski поднимает хороший вопрос, а именно: возможно для доступа к символам с использованием скобок, поскольку скобки могут использоваться для доступа к членам. JavaScript Array
. Для этого потребуется создать новый Array
, используя каждый из символов строки в качестве ее членов, а затем получить доступ к Array
.
Это, вероятно, сбивающий с толку подход. Некоторые реализации JavaScript предоставляют доступ к строке через скобки, а некоторые - нет, поэтому это не стандартная практика. Объект может быть перепутан со строкой, и, поскольку JavaScript является свободно типизированным языком, уже существует риск неверного представления типа. Определение массива исключительно для целей использования синтаксиса, отличного от того, что уже есть в языке, - всего лишь гонг, способствующий путанице такого типа. Это вызывает вопрос @ Andrew Hedges : «Зачем бороться с языком?» ..
В JavaScript есть полезных шаблонов для законных функций, перегружающих и полиморфное наследование . Это не пример того или другого.
За исключением всей семантики, операторы до сих пор не переопределены.
Примечание: Разработчики, привыкшие к соглашениям о строгой проверке типов и классическом наследовании, иногда смущаются синтаксисом C-семейства JavaScript. Под капотом работает незнакомым образом. Лучше всего писать JavaScript чистыми и недвусмысленными способами, чтобы избежать путаницы.