我遇到以下问题:我想从函数printHello
调用函数testHello
。 printHello
函数是独立运行的,但是,当我尝试从printHello
函数调用testHello
时,出现引用错误。谢谢您的帮助。
class Test {
constructor(name) {
this.name;
}
printHello(parameter) {
console.log(parameter);
}
testHello() {
printHello(printHello(this.name));
}
}
var test = new Test("Sandro");
test.printHello("hello"); //works, prints "Hello" to the Console
test.testHello(); // does not work: Reference Error: printHello is not defined
答案 0 :(得分:5)
使用this
关键字。另外,您有几个错误(我已对它们进行了评论)
class Test{
constructor(name){
this.name = name; // <- you need to assign the `name` to `this.name`
}
printHello(parameter){
console.log(parameter);
}
testHello(){
this.printHello(this.name); // <- you had double invocation here
}
}
var test = new Test("Sandro");
test.printHello("hello"); //works, prints "Hello" to the Console
test.testHello(); // does not work: Reference Error: printHello is not defined
答案 1 :(得分:0)
您可能需要致电
this.printHello(this.name);
在您的testHello函数内部。
答案 2 :(得分:0)
代码中的几个问题可以轻松解决。
1)您需要在构造函数中设置new Gson.fromJson(yourObject, class);
属性。
2)您想在this.name
内以printHello
到testHello
的电话前面加上
this.
答案 3 :(得分:0)
class Test {
constructor(name) {
this.name = name;
}
printHello(parameter) {
console.log(parameter);
}
testHello() {
this.printHello(this.name);
}
}
var test = new Test("Sandro");
test.printHello("hello"); //works, prints "Hello" to the Console
test.testHello(); // does not work: Reference Error: printHello is not defined
var测试是在全局级别上定义的。这将返回一个包含name属性的对象。在原型中,我们可以看到构造函数,printHello和testHello函数。现在,当您调用//test.printHello//时,它将正常工作。为什么?当功能不在同一级别时,它将下降为原型,直到满足功能为止。在原型中,您可以看到printHello函数。这就是所谓的原型继承。
现在//test.testHello()//中会发生什么。 javaScript尝试执行此功能,并查看其中的另一个功能。因此它将尝试查找此printHello函数的定义位置!。
现在,我们需要了解词法环境。检查此示例,
var test = 'hello' ;
function foo(){
var test = 'world'
console.log(test)
}
现在,如果您调用foo()会发生什么?它将console.log'world',
现在我要删除函数内部的测试变量
var test = 'hello' ;
function foo(){
console.log(test)
}
现在我们叫foo();输出将为“ hello”
您的代码也会发生同样的事情。一旦javascript尝试执行test.testHello(),它就会在该函数中看到printHello()。现在它将尝试在相同级别上查找该功能。在testHello()函数的原型和testHello()的原型中都没有定义它。因此,现在javaScript试图找出在哪里定义了testHello()函数。它是全局级别的,因为var test是在全局级别定义的。这个printHello()是在全局级别定义的吗?没有!它位于该对象的原型内。现在,javaScript也无法在全局级别上找到printHello函数。因此,它会抛出一个错误,提示说printHello()是未定义的。 “ this”关键字可帮助您引用其所属的对象。简而言之,我们要求使用“ this”关键字,请先检查测试对象的原型,然后再在全局范围内进行搜索。 (请注意,不是在testHello()原型中,而是在测试对象原型中)
重要的是要理解的是功能实际上不是功能。它们是javaScript中的对象!!!使用“ this”关键字。我会帮你的。另外,尝试了解原型继承和词法环境。