¿Cómo puedo establecer la propiedad c en la función func a continuación? En este momento, el último registro imprime undefined en lugar del valor calculado.

function X(a, b) {
  let func = function() {
    console.log('I am here');
      this.c = a + b;
    }

  this.a = a;
    this.b = b;

  func();
}

let x = new X(5, 4);
console.log(x.a + ' + ' + x.b + ' = ' + x.c);
-1
no one special 26 feb. 2018 a las 14:42

4 respuestas

La mejor respuesta

Almacene this en that (nueva variable) y utilícelo como that.c = some_assignment

function X(a, b) {
    let that = this;
    let func = function() {
        console.log('I am here');
        that.c = a + b;
    }

    this.a = a;
    this.b = b;

    func();
}

let x = new X(5, 4);
console.log(x.a + ' + ' + x.b + ' = ' + x.c);
1
void 26 feb. 2018 a las 11:44
  • Eso sucede porque el contexto de this no proviene de la función X.
  • Para compatibilidades de tecnología entre navegadores y backend, puede vincular el contexto this utilizando la función bind
func.bind(this)();
function X(a, b) {
  let func = function() {
    console.log('I am here');
    this.c = a + b;
  }

  this.a = a;
  this.b = b;

  func.bind(this)();
}

let x = new X(5, 4);
console.log(x.a + ' + ' + x.b + ' = ' + x.c);
1
Ele 26 feb. 2018 a las 11:50

Use las funciones arrow en es6 para que pueda acceder al padre this de lo contrario puede usar para hacer this como una variable global y puede acceder al padre este

function X(a, b) {
  let func = () => {
    console.log('I am here');
      this.c = a + b;
    }

  this.a = a;
    this.b = b;

  func();
}

let x = new X(5, 4);
console.log(x.a + ' + ' + x.b + ' = ' + x.c);
1
zabusa 26 feb. 2018 a las 11:45

Almacene la referencia de esto en alguna variable. En general, yo mismo o eso.

function X(a, b) {
  let me = this;
  let func = function() {
    console.log('I am here');
      me.c = a + b;
    }

  this.a = a;
    this.b = b;

  func();
}

let x = new X(5, 4);
console.log(x.a + ' + ' + x.b + ' = ' + x.c);
0
ivp 26 feb. 2018 a las 11:46