Una pregunta por curiosidad. Analicé una aplicación de Ember por primera vez y me encontré con un código de este tipo:
export default Service.extend({ api: service(), router: service(), flashes: service(), intercom: service(), store: service() // ... }) Como puedo ver, la función de service aquí es lo suficientemente inteligente como para devolver resultados adecuados para cada tecla a la que se llama. Y mi pregunta es: ¿cómo es posible? Pensé que conocía JavaScript, pero no tengo idea de cómo podría implementarse. Las funciones de JavaScript solo conocen sus argumentos y this objeto para el que son llamados, ¿no es así?
Por lo que puedo decir de los documentos de API y de la fuente, esto puede funcionar porque está llamando a service() en un tipo especial de objeto que tiene lo que Ember llama un 'propietario'. Cuando se llama al servicio, puede usar el propietario de los objetos para buscar el nombre de la propiedad y determinar el nombre del servicio. Podría estar leyendo esto mal, estoy como 50% seguro.