Thisify — Converta argumentos em propriedades

Considere uma função construtora, foo:

const foo = function(x, y, z)
{
  this.x = x
  this.y = y
  this.z = z
}

foo recebe três parâmetros, x, y, z. Quando uma instância de foo é criada, ela recebe as propriedades x, y, z.

const bar = new foo(1, 2, 3)
// bar.x = 1
// bar.y = 2
// bar.z = 3

O objetivo deste desafio é alcançar um resultado equivalente sem atribuir as propriedades explicitamente. Em vez disso, crie uma função thisify para fazer isso de forma automática e dinâmica.

Veja como foo deve ficar:

const foo = function(x, y, z)
{
  thisify(this, Object.values(arguments))
}
// same as before!

const bar = new foo(1, 2, 3)
// bar.x = 1
// bar.y = 2
// bar.z = 3

thisify receberá dois argumentos:

/**
 * @param {Object} instance - instance of the class
 * @param {Array} passed - arguments (values) passed to parameters of constructor
 *
 * @returns {void(0)}
 */

function thisify(instance, passed)
{
  // your code here
}

Ao ser executada, espera-se que thisify atribua propriedades com o mesmo nome e valor do argumento. Por exemplo, se o argumento x receber o valor 2, o objeto deverá ter uma propriedade "x" com valor 2.

Exemplos

const rectangle = function(l, w, color)
{
  thisify(this, Object.values(arguments))
}

console.log(new rectangle(5, 10, "Red")) ➞
{
  l: 5,
  w: 10,
  color: "Red"
}

console.log(new rectangle(3, 4)) ➞
{
  l: 3,
  w: 4,
  color: undefined
}

Observações

  • Se algum argumento não for definido, atribua-lhe undefined.
  • Use a seção Resources se precisar de ajuda.