【问题标题】:Can't use method of passed object in function不能在函数中使用传递对象的方法
【发布时间】:2021-02-28 23:43:19
【问题描述】:

我的尝试

我有一个恒温器程序,由于它是通过测试驱动开发制作的,所以它工作得非常好。然后我在我的索引区域编写了一些代码,将我的元素和按钮链接到恒温器程序,这一切都奏效了。

造成问题的原因

当我现在想把它放在另一个 js 文件 Linker.js 中时,问题就出现了。如果您从 Linker.js 中删除 thermo.up(1),您看到的代码可以正常工作

Linker.js

function returnTemp(thermo) {
    thermo.up(1)
    console.log(thermo.temp)
}

Thermostat.js

static up(num) {
        this._tempChange(num);
        console.log(this.temp);
    };

索引.js

<!-- JS -->
<script src="src/Thermostat.js"></script>
<script src="src/Linker.js"></script>
<script>
    var stat = new Thermostat
</script>

控制台

returnTemp(stat)
Uncaught TypeError: thermo.up is not a function
    at returnTemp (Linker.js:59)
    at <anonymous>:1:1
(edited)

【问题讨论】:

  • static 方法没有 this 引用类的实例。静态方法将被称为 Thermostat.up(),而不是 instanceOfThermostat.up()
  • 哦,我明白了,我想。我可以将温度的实例变量改为类变量吗?
  • 这取决于变量应该具有的范围。如果您希望类的实例具有自己的值,则不会使用静态方法或变量。
  • 我明白了。我现在将尝试使这些方法不是静态的,如果解决了问题,我会回来报告。
  • 成功了!我是这个 javascript 范围的新手。谢谢!

标签: javascript function class parameters external


【解决方案1】:

我如何修复它是 Taplar 描述的。

我的恒温器类有类方法,而不是实例方法。删除我的方法的 static 关键字解决了我的问题。

Javascript Scope 再次来袭。

【讨论】:

  • 只是 FWIW,类与原型方法(实例方法略有不同)与 范围 无关。范围是关于独立的标识符解析。您的问题是在对象上寻找不存在的属性(因为该属性位于构造函数上,而不是实例继承自的原型上)。
猜你喜欢
  • 2020-12-05
  • 2022-08-31
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 2023-04-05
  • 2021-03-11
  • 2020-11-07
  • 2017-09-03
相关资源
最近更新 更多