function Square(a) { this.a = a ** 2; return a; } const value = Square.call({}, 5); console.log(value.a);Real -> valor.a = indefinido
Esperado -> valor.a = 25
Estás devolviendo a , entonces 5 , no el objeto. Y pasa un objeto {} para this , pero no está almacenado en ningún lado, no puede verificarlo más tarde. Si pasó un objeto al que tiene acceso después, como diz a continuación, su .a se convierte en 25 correctamente:
function Square(a) { this.a = a ** 2; return a; } const diz = {}; const value = Square.call(diz, 5); console.log("Returned 'a', should be 5:",value); console.log("Altered 'object.a', should be 25:",diz.a); Alternativamente, es posible que haya querido return this; :
function Square(a) { this.a = a ** 2; return this; } const value = Square.call({}, 5); console.log(value.a);No sé por qué usas this , o de dónde proviene este value de objeto. Pero déjame explicarte. Su argumento a no se puede cambiar directamente. Debe asignarlo a una variable, por ejemplo, result para cambiarlo y devolverlo.
return result = a ** 2; Para llamar a la función, no usa .call . Simplemente llámalo en tu console.log() .
console.log(square(a));Toda la magia de esta función que quieres escribir:
function square(a) { return result = a * a; } console.log(square(a)); // expected result is 25Recomiendo un curso sobre freeCodeCamp para aprender los fundamentos de JavaScript. Puedes encontrarlo aquí .