我正在学习javascript,遇到了下面的挑战,但我不知道如何解决它。我想让你的意见知道如何根据这些声明获得以下结果。
// DO NOT CHANGE CODE BELOW
let increment1 = new Increment()
let increment2 = Increment()
console.log(increment1 == +increment2) // true
console.log(`val: ${increment1}`) // val: 1
console.log(`val: ${increment1}`) // val: 2
console.log(`val: ${increment1}`) // val: 3
我尝试过使用Prototype来解决问题。
在给定的代码中需要注意的一些事情:
函数Increment
是一个构造函数,因为它可以用new
调用。因此,我们知道new Increment
返回的值不是一个基元值(像数字一样(,而是一个对象。
但是也应该可以在没有new
的情况下调用Increment
。这意味着Increment
不应假定this
是创建的对象,而应具有显式返回值的规定。
从一元+
的使用中,我们了解到对象可以被强制为一个数字。因此,我们应该在对象中提供valueOf
或toString
方法。在后一种情况下,我们应该让toString
返回一个有效数字表示的字符串。
从模板字符串的使用中,我们了解到对象可以被强制为字符串,从而产生"字符串";1〃"2〃。。。所以现在我们知道我们应该选择CCD_ 12而不是CCD_。
从我们从打印的模板文本中看到的增量行为中,我们了解到我们需要一个在toString
函数范围内的数字变量,但不是它的局部变量。最佳做法是在Increment
定义的范围内定义变量,而不是将其定义为全局变量(尽管这也可行(。
把所有信息放在一起,我们得到了这个:
function Increment() {
let count = 0;
return {
toString() { return count++; }
}
}
// DO NOT CHANGE CODE BELOW
let increment1 = new Increment()
let increment2 = Increment()
console.log(increment1 == +increment2) // true
console.log(`val: ${increment1}`) // val: 1
console.log(`val: ${increment1}`) // val: 2
console.log(`val: ${increment1}`) // val: 3