【问题标题】:Trying to create this. Can someone assist?试图创造这个。有人可以帮忙吗?
【发布时间】:2021-08-24 17:38:24
【问题描述】:

有人可以在下面帮助解决这个问题吗?

在 JavaScript 中,定义一个函数 makeCounter,它接受一个定义初始值 start 的可选参数,默认值为 0。该函数应返回一个包含定义 3 个方法的键的对象: - value 返回计数器的当前值 - increment 将计数器的值加 1 并返回新值 - decrement 将计数器的值减1并返回新值

The returned object should not allow direct modification or retrieval of the value.


Example usage:

var counter = makeCounter();
console.log(counter.value());
// 0

var counter2 = makeCounter(4);

console.log(counter2.value());
// 4

console.log(counter2.increment());
// 5
console.log(counter2.value());
// 5

counter2.decrement();
counter2.decrement();
console.log(counter2.decrement());
// 2

【问题讨论】:

标签: javascript object key counter optional-arguments


【解决方案1】:

我建议只使用new 运算符,而不是使用函数makeCounter()value 类字段的 # 前缀使其成为私有字段。

class Counter {
  #value
  constructor(value = 0) {
    this.#value = value;
  }
  value() {
    return this.#value;
  }
  increment() {
    this.#value++;
  }
  decrement() {
    this.#value--;
  }
}

let counter = new Counter(3);
console.log(counter.value());
counter.increment();
console.log(counter.value());

【讨论】:

  • “我建议不要使用函数makeCounter(),而是使用new 运算符” 为什么?我看不出将类和私有字段等概念引入其中。
  • @Thomas 关于类,因为替代方案(即 makeX() 构造包含方法的对象文字的函数)不受欢迎。关于私有字段,因为问题明确要求该字段不可公开访问。
猜你喜欢
  • 1970-01-01
  • 2021-06-20
  • 1970-01-01
  • 1970-01-01
  • 2022-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多