JavaScript 为什么 'this' 未正确绑定(bind)

标签 javascript ecmascript-6

看看这个 fiddle :
https://jsfiddle.net/2aLht10r/1/ enter image description here

你可以看到,当我想要得到 B 时,我却得到了 undefined。 由于某种原因,第 11 行中的 this 是 undefined ,它应该是第 17 行中创建的 a 对象的 this (在类 B 中) )。

我的代码有什么问题吗?

这是 fiddle 代码:

class A {
  selector;
  ui = {
    selector: `${this.selector} aaa`
  }

  constructor(selector) {
    this.selector = selector;
  }

  clog = console.log.bind(null, this.ui.selector)
}

class B {
  selector;
  ui = {
    a: new A('B')
  }

  print = this.ui.a.clog.bind(this.ui.a);
}

new B().print();

最佳答案

操作的顺序让你陷入困境。

class A {
  selector;
  ui = {
    selector: `${this.selector} aaa`
  }

  constructor(selector) {
    this.selector = selector;
  }
}
console.log(new A("thing").ui.selector)

打印 undefined aaa 正如你所说,因为它相当于:

class A {
  constructor(selector) {
    this.ui = {
      selector: `${this.selector} aaa`
    };

    this.selector = selector;
  }
}
console.log(new A("thing").ui.selector);

因此,您的 ui 属性在被分配传递给构造函数的值之前会存储 this.selector + 'aaa'

也许你这样做会更好:

class A {
  ui = {
    selector: null,
  };

  constructor(selector) {
    this.ui.selector = `${selector} aaa`;
  }
}
console.log(new A("thing").ui.selector)

关于JavaScript 为什么 'this' 未正确绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39561736/

相关文章:

javascript - JavaScript 中字符串中小写字母和大写字母之间的空格

javascript - 如何追踪添加事件监听器的位置?

javascript - 为什么第 27 行在第 24 行之前执行?

reactjs - 在 react redux 中的全局状态更改后调度新 Action

javascript - JS es2015 中未知的函数格式

javascript - 如何定义一个函数来像这样调用 : function1(). function2()?

javascript - 更新和/或修复 AppFog 数据库的模式

javascript - PhoneGap 应用程序无法与 Google Analytics 一起使用

php - 如何让 javascript 读取 php 文件的输出

javascript - ES6 自执行导入