链接的类方法抛出“不是函数”错误

时间:2019-01-04 06:07:58

标签: javascript typeerror

我正在尝试对JS类中的链接函数进行练习。我遇到了一些问题,其中函数的名称产生了一些奇怪的错误。

基本上,

const user = User.init();
user.name().first_name("Alice").last_name("Bob");

具有功能

class User
{

static init()
{
    return new User();
}

constructor()
{
    this.firstname = "";
    this.lastname = "";
    this.dob = "";
    this.unit = "";
    this.street = "";
    this.suburb = "";
    this.state = "";
    this.postcode = "";
}

name()
{
    console.log("lol this is name");
    return this;
}

first_name(firstname)
{
    console.log("Setting firstname");
    return this;
}

last_name(lastname)
{
    console.log("Setting lastname");
    return this;
}
}

产生一个错误,但是,

const user = User.init();
user.name().firstname("Alice").lastname("Bob");

具有功能

class User
{

static init()
{
    return new User();
}

constructor()
{
    this.firstname = "";
    this.lastname = "";
    this.dob = "";
    this.unit = "";
    this.street = "";
    this.suburb = "";
    this.state = "";
    this.postcode = "";
}

name()
{
    console.log("lol this is name");
    return this;
}

firstname(firstname)
{
    console.log("Setting firstname");
    return this;
}

lastname(lastname)
{
    console.log("Setting lastname");
    return this;
}
}

没有。

错误消息

user.name().firstname("Alice").lastname("Bob");
        ^

TypeError: user.name(...).firstname is not a function

这两个方法都相同,除了函数名上的下划线。请问有人在那里告诉我这是什么错误。谢谢!

1 个答案:

答案 0 :(得分:0)

您的User.init()呼叫new User()。这将创建一个新的User对象,该对象的firstname作为“设置名字”功能从类原型继承而来,然后通过设置this.firstname = ""立即使其模糊。

在第二个示例中,您没有执行this.first_name = "",并且该对象仍然起作用。

通常,您应该确定哪些属性是方法,哪些属性是数据-您不能同时使用两个属性。

(请注意,这也说明了适当上下文的重要性-从您最初发布的代码段中诊断出此错误的可能性几乎为零:)