无法从Javascript ES6构造函数调用方法

时间:2017-06-28 13:34:56

标签: javascript

我有以下“类”定义:

<div id="app">
    {{ mycomputedprop }}
</div>

当构造函数被执行时,调用方法getName并且在方法内部this.FullName具有正确的值,但是当它再次跳转到构造函数(this.Age)时,this.FullName变为未定义。 / p>

你能解释一下为什么没有保持正确的价值吗?

非常感谢

何。

4 个答案:

答案 0 :(得分:1)

这里有两个问题:   - 首先,应通过getName调用this方法,即this.getName;否则,它将在全局范围内搜索getName函数,而不是类中的函数。   - 第二,你没有从getName方法返回任何值!不要分配FullName,而是尝试返回结果:

getName(){
    return this.Name+" "+this.Surname;
}

这将返回连接的结果,并通过

相应地设置FullName属性
this.FullName=this.getName();

线。

答案 1 :(得分:1)

getName() 设置 this.FullName的值,但它不会返回任何内容。在Javascript中,当您将变量设置为没有返回的函数的结果时,该变量将是未定义的。因此,代码中发生的事情是getName()设置this.FullName的值,但是您的构造函数将this.FullName设置为等于getName()返回的值,这是未定义的。

您可以通过两种方式解决此问题。一个是让getName()实际获取并返回一个值,顾名思义:

class MyClass{
     constructor(name, surname, age){
         this.Name=name;
         this.Surname=surname;
         this.FullName=this.getName();
         this.Age=age;

     }
     getName(){
         return this.Name+" "+this.Surname;
     }
}
let myClass=new MyClass("Jose","Suarez",22);

另一种选择是简单地调用this.getName()而不将其结果设置为变量,如下所示:

class MyClass{
     constructor(name, surname, age){
         this.Name=name;
         this.Surname=surname;
         this.getName();
         this.Age=age;

     }
     getName(){
         this.FullName=this.Name+" "+this.Surname;
     }
}
let myClass=new MyClass("Jose","Suarez",22);

编辑: 正如Pampattitude指出的那样,getName()this.getName()之间存在差异。从对象内部引用成员函数时,必须使用this,就像对象中的变量一样。

答案 2 :(得分:0)

因为getName没有return语句,所以它返回undefined

 getName(){
     return this.Name + " " + this.Surname;
 }

并正确使用getName

this.Fullname = this.getName()

答案 3 :(得分:0)

你需要从getName()返回全名,如下所示:

class MyClass{
     constructor(name, surname, age){
         this.Name=name;
         this.Surname=surname;
         this.FullName=this.getName();
         this.Age=age;

     }
     getName(){
         return this.FullName=this.Name+" "+this.Surname;

     }
};
let myClass=new MyClass("Jose","Suarez",22);