Я разрабатываю небольшую библиотеку и стараюсь, чтобы API API был как можно меньше, чем , идея использования функции как самого словаря/объекта выглядит привлекательным.Использование функции в качестве словаря
Идея заключается в том, чтобы иметь возможность вызвать функцию обычно нравится:
fn('hello', 'some other extra info to be processed', etc...)
Этот вызов будет обрабатывать информацию, а затем хранить его где-нибудь. Эта обработанную информацию можно получить в определенных условиях (не типичный случай), и было бы здорово, чтобы получать информацию таким образом:
fn['hello']
//-> some stuff
В питона, например, было бы очень легко перегрузить оператор []
, , но AFAIK там нет простого и надежного способа в JS, который работает в большинстве окружений (прокси, похоже, делают трюк, но пока мы еще не так). Getters и seters не являются опцией, так как пользователь может ввести любое значение.
Поэтому я остался с установкой атрибутов функции объекта, который кажется Hacky, потому что я мог бы переписать исходные атрибуты функции, , например:
apply
prototype
__proto__
Однако многие вещи в JS мир хаки, и мы счастливо делаем их каждый день. Вопрос: это опасно и приведет к гибели тысяч котят?
Я не вижу преимущества использования 'fn ['hello']' over 'fn ('hello')'. Почему бы просто не использовать функцию-вызов? Как вы упомянули, добавление свойств функции может завершиться неудачей. – Thomas
такой подход 'fn ['hello'] <-> fn ('hello')' выглядит запутанным и неоднозначным – RomanPerekhrest
@Thomas, есть две операции. Вызов функции будет обрабатывать и регистрировать некоторые данные, а '[]' access будет возвращать эти данные. Во всяком случае, прецедент не стоит подробно объяснять, вопрос в том, произойдет ли это взорваться или нет. Моим вторым подходом было бы приложить к функции метод '.get'. – bgusach