Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t在函数中使用传递对象的方法_Javascript_Function_Class_Parameters_External - Fatal编程技术网

Javascript Can';t在函数中使用传递对象的方法

Javascript Can';t在函数中使用传递对象的方法,javascript,function,class,parameters,external,Javascript,Function,Class,Parameters,External,我尝试过的 我有一个恒温器程序,它工作得非常好,因为它是用测试驱动开发的。然后,我在索引区域中编写了一些代码,将我的元素和按钮链接到恒温器程序,所有这些都起作用了 是什么造成了问题 当我现在想把它放在另一个js文件Linker.js中时,问题就出现了。如果从Linker.js中删除thermo.up(1),您看到的代码可以正常工作 Linker.js function returnTemp(thermo) { thermo.up(1) console.log(thermo.tem

我尝试过的

我有一个恒温器程序,它工作得非常好,因为它是用测试驱动开发的。然后,我在索引区域中编写了一些代码,将我的元素和按钮链接到恒温器程序,所有这些都起作用了

是什么造成了问题

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

Linker.js

function returnTemp(thermo) {
    thermo.up(1)
    console.log(thermo.temp)
}
恒温器.js

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

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

var stat=新恒温器
控制台

returnTemp(stat)
Uncaught TypeError: thermo.up is not a function
    at returnTemp (Linker.js:59)
    at <anonymous>:1:1
(edited)
returnTemp(stat)
未捕获类型错误:thermo.up不是函数
返回温度(Linker.js:59)
时间:1:1
(编辑)

我是如何修复它的,正如塔普拉所描述的那样

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


Javascript作用域再次出现。

静态
方法没有引用类实例的
this
。静态方法的调用类似于
Thermostat.up()
,而不是
instanceOfThermostat.up()
哦,我明白了,我想。我会将温度的实例变量改为类变量吗?这取决于变量应该具有的范围。如果您想让类的实例具有它们自己的值,您就不会使用静态方法或变量。我将尝试使这些方法现在不是静态的,如果它修复了它,我会报告回来。它成功了!我不熟悉javascript范围的东西。非常感谢。只是FWIW,类与原型方法(实例方法略有不同)与范围无关。作用域是关于独立标识符解析的。您的问题是查找对象上不存在的属性(因为该属性位于构造函数上,而不是实例继承的原型)。