我正在尝试对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
这两个方法都相同,除了函数名上的下划线。请问有人在那里告诉我这是什么错误。谢谢!
答案 0 :(得分:0)
您的User.init()
呼叫new User()
。这将创建一个新的User
对象,该对象的firstname
作为“设置名字”功能从类原型继承而来,然后通过设置this.firstname = ""
立即使其模糊。
在第二个示例中,您没有执行this.first_name = ""
,并且该对象仍然起作用。
通常,您应该确定哪些属性是方法,哪些属性是数据-您不能同时使用两个属性。
(请注意,这也说明了适当上下文的重要性-从您最初发布的代码段中诊断出此错误的可能性几乎为零:)