Pregunta: creé un objeto que contenía 2 valores con nombre. Una es una función y la otra es el valor producido por la función. Mi problema es que no puedo entender la sintaxis para el segundo valor con nombre. ¿Cómo lo hago referencia? He buscado en todas partes, pero no puedo encontrar un objeto de ejemplo similar del que pueda aprender. ¡Muchas gracias!

var answer = {
    addNumbers: function(a, b, c) {
        return a + b + c;
    },
    result: answer.addNumbers;  //I'm not sure what the syntax is for this line.
};
0
DR01D 29 oct. 2017 a las 03:46

3 respuestas

La mejor respuesta

Realmente no entiendo lo que quieres hacer, pero si quieres almacenar el resultado cada vez que se ejecuta la función, es posible que quieras hacer algo como esto:

var answer = {
    addNumbers: function(a, b, c) {
        this.result = a + b + c;
        return this.result;
    },

    result:0
};

Creo que explicaré un poco el JSON:

En general, solo enumera una serie de propiedades. Aquí, especificamos addNumbers y result y les asignamos valores.

El valor de addNumbers es un Function - objeto (por lo tanto invocable), el valor de result es un Number - objeto (0 en este caso).

Ahora puede ejecutar addNumbers llamándolo como answer.addNumbers(1,2,3). Cuando esto sucede, se ejecuta todo entre { y } del cuerpo de la función, incluida la nueva asignación de this.result.

Hay más cosas sobre este tema, especialmente cómo this se resuelve en varios casos, pero eso excedería el alcance de esta respuesta.

1
Psi 29 oct. 2017 a las 01:11

¿Sería aceptable para usted lo siguiente?

var addNumbers = function(a, b, c) {
    return a + b + c;
}
var answer = {
    addNumbers: addNumbers,
    result: addNumbers(...)
};

Alternativamente:

var answer = {
    addNumbers: function(a, b, c) {
        return a + b + c;
    }
};
answer.result = answer.addNumbers(...);
1
JCOC611 29 oct. 2017 a las 01:04

El último resultado de la función también se puede almacenar en el objeto de función:

function addNumbers(a, b, c) {
    addNumbers.result = a + b + c
    return addNumbers.result
}

addNumbers(1,2,3)

console.log(addNumbers.result)

De lo contrario, es posible ejecutando una función que acepta otra función y devuelve el objeto:

var result = (function(f, a, b, c) { 
  return {
    addNumbers: f,
    result: f(a, b, c)
  }
})(function(a, b, c) { return a + b + c }, 1, 2, 3)

console.log(result)
1
Slai 29 oct. 2017 a las 01:31