如何从类中的另一个函数调用一个函数

时间:2019-04-03 13:34:46

标签: javascript function referenceerror

我遇到以下问题:我想从函数printHello调用函数testHelloprintHello函数是独立运行的,但是,当我尝试从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

4 个答案:

答案 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内以printHellotestHello的电话前面加上

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”

  1. 函数执行时,javascript尝试查找测试变量。哦,在同一水平上。换句话说功能级别。现在,javaScript知道了test的值,因此它将执行console.log();
  2. 这次,javascript尝试查找测试变量。嗯,它不在同一个级别内。 (功能级别)。好,没问题让我们看看该函数在哪里定义。哦,它是在全局级别定义的。好的,现在我将在全局级别找到该测试变量。啊哈,这是。其值为“ hello”

您的代码也会发生同样的事情。一旦javascript尝试执行test.testHello(),它就会在该函数中看到printHello()。现在它将尝试在相同级别上查找该功能。在testHello()函数的原型和testHello()的原型中都没有定义它。因此,现在javaScript试图找出在哪里定义了testHello()函数。它是全局级别的,因为var test是在全局级别定义的。这个printHello()是在全局级别定义的吗?没有!它位于该对象的原型内。现在,javaScript也无法在全局级别上找到printHello函数。因此,它会抛出一个错误,提示说printHello()是未定义的。 “ this”关键字可帮助您引用其所属的对象。简而言之,我们要求使用“ this”关键字,请先检查测试对象的原型,然后再在全局范围内进行搜索。 (请注意,不是在testHello()原型中,而是在测试对象原型中)

重要的是要理解的是功能实际上不是功能。它们是javaScript中的对象!!!使用“ this”关键字。我会帮你的。另外,尝试了解原型继承和词法环境。