【发布时间】:2021-10-31 07:42:02
【问题描述】:
我试图使用类在节点中制作一个菜单驱动的 JS 程序。我第一次写的代码在语义上是错误的,但它仍然有效。
const read = require('readline-sync')
let flag = 1
class operations {
constructor(num1, num2) {
this.num1 = num1
this.num2 = num2
}
addition() {
let sum = num1 + num2
console.log(num1 + " + " + num2 + " = " + sum)
}
subtraction() {
let diff = num1 - num2
console.log(num1 + " - " + num2 + " = " + diff)
}
multiplication() {
let prod = num1 * num2
console.log(num1 + " x " + num2 + " = " + prod)
}
division() {
let quotient = num1 / num2
console.log(num1 + " / " + num2 + " = " + quotient)
}
}
do {
console.log("Enter two numbers ")
num1 = read.questionInt()
num2 = read.questionInt()
let opvar = new operations(num1, num2)
console.log("Enter your choice of operation\n1.Addition\n2.Subtraction\n3.Multiplication\n4.Division")
let choice = read.questionInt()
switch (choice) {
case 1:
opvar.addition()
break
case 2:
opvar.subtraction()
break
case 3:
opvar.multiplication()
break
case 4:
opvar.division()
break
default:
console.log("Invalid Entry")
}
flag = read.questionInt("Press 1 to continue and 0 to exit ")
}
while (flag === 1)
但是如果没有我在类方法中使用“this”关键字,它是如何工作的呢?所以如果我不使用'this'关键字,类/对象方法会访问同名的全局变量吗? 我是初学者,所以如果这是一个愚蠢的问题,我提前道歉。
【问题讨论】:
-
如果它们没有在本地定义,即在函数内部,那么是的,它们将被查找范围链直到它到达全局范围。然后在
do...while循环中使用num1 = read.questionInt()行设置全局变量 -
当使用new关键字调用函数时,该函数是构造函数并返回一个新实例。在这些情况下,“this”指的是新创建的实例。
-
拜托,请在严格模式下运行您的代码,然后这个
accidental分配给全局变量将被标记为编程错误(它应该是),然后这种事情不会意外发生.将报告错误,您必须修复代码才能正确。strict模式是你的朋友。 -
@peter 但是我们不能在构造函数内部或javascript类的方法外部使用'var'、'let'或'const',可以吗?但是我们可以使用那些内部类方法。有点奇怪
-
num1 = read.questionInt()num1 和num2是什么,你可能会得到不同的结果
标签: javascript node.js this es6-class