class Rabbit1 {
constructor(name, color, type) {
if (arguments.length !== 3) throw new Error("Wrong length of arguments given");
this.ar1 = name;
this.ar2 = color;
this.ar3 = type;
this.testExtra = [];
if (!name) {
this.testExtra[0] = "This is in the constructor";
} else {
this.testExtra[0] = "Name is True";
}
}
speak(line) {
console.log(`The ${this.ar2} Rabbit, called '${this.ar1}' and says it\ 's a ${this.ar3} rabbit, Oh and it\'s saying ${line} too... ${this.testExtra}`);
}
speak2(speak) {
console.log("Hello " + this.ar1);
}
}
let blackR = new Rabbit1(false, "black", "gentle");
blackR.speak("Hello");
我问这个问题是因为,如果您看一下
if (!name)
使用绑定name
,它引用该类实例的name
(在本例中为blackR
)。
因此,当this.name
本身引用类实例中给出的name
值时,为什么要使用name
。
请忍受缩进不良。 谢谢。
答案 0 :(得分:0)
使用绑定
name
,它引用该类实例的name
(在本例中为blackR
)。
不,不是。 name 是构造函数中的第一个参数:
constructor(name, color, type) {
通话中的第一个值为false
:
let blackR = new Rabbit1(false, "black", "gentle");
这就是分配给 name 的值。它还已分配给 this.ar1 中的
:this.ar1 = name;
代码产生:
"The black Rabbit, called 'false' and says..."
其中显示 this.ar1 的值为 false 。
所以当
this.name
本身引用名称值时,为什么我们使用name
表达式 this.name 没有出现在OP中。如果您的意思是“为什么使用this.ar1而不是名称”,则无法从发布的代码中分辨出来。在构造函数中,它们本质上是相同的,并且具有相同的值。
但是, ar1 是实例的公共属性,因此可以在以后进行更改。