更新:
对不起,我浪费了你的时间,互联网。
我的代码是错误的,复制和替换我运行的代码所导致的错误导致我提出这个问题。这是更正后的代码和输出。
class Object2 {
#jaxx = 'cat'
constructor(){}
getJaxx(){
return this.#jaxx
}
}
const object1 = {jaxx: 'cat'}
const object2 = new Object2()
console.log('object1.jaxx:', object1.jaxx)
object1.jaxx = 'dog'
console.log('after object1.jaxx = "dog":', object1.jaxx)
console.log('object2.getJaxx', object2.getJaxx())
object2.jaxx = 'dog'
console.log('object2.getJaxx', object2.getJaxx())
控制台:
object1.jaxx: cat
after object1.jaxx = "dog": dog
object2.getJaxx cat
object2.getJaxx cat
我试图理解如何以及为什么使用 getter 和 setter,以及一般的私有字段。我读过很多解释,但没有一个对我来说有意义。我的理解是,我们这样做是为了保护该领域免受操纵。但是,如果该字段包含任何类型的对象,它仍然是可变的,因此是可操作的。
例如,
class Object2 {
#jaxx = 'cat'
constructor(){}
}
const object1 = {jaxx: 'cat'}
const object2 = new Object2()
object1.jaxx = 'dog'
console.log('object1.jaxx', object1.jaxx)
console.log('object2.getJaxx', object2.getJaxx)
object2.getJaxx() = 'dog'
console.log('object2.getJaxx', object2.getJaxx)
控制台:
object1.jaxx dog
object2.getJaxx ƒ getJaxx(){
return this.#jaxx
}
object2.getJaxx dog
我写了一个名为 EasyAccessorJS 的类,但我在不了解发生了什么的情况下犹豫是否使用它。
那么——有什么意义呢?这一定是有原因的。我读过很多很多解释,但没有一个对我来说有意义。
我尝试设置私有字段以防止对该字段进行操作。
私有方法和字段可以更改吗? 虽然在某些语言中通过反射或其他方式访问和修改私有字段和方法在技术上是可行的,但通常不鼓励这样做。主要原因是:
可维护性:访问私有字段和方法会破坏封装,并可能导致代码脆弱且难以维护。 代码可读性:它使代码更难理解和遵循,因为它打破了类设置的预期抽象边界。
兼容性:将来可能会导致兼容性问题。如果类依赖外部代码访问其私有成员,则对这些成员的任何更改都可能会破坏外部代码。
总而言之,私有方法和字段对于保护对象数据的完整性、隐藏实现细节以及确保以受控和可预测的方式使用对象至关重要。虽然可以使用某些技术来访问它们,但这样做会破坏封装原则,应该避免。