为什么我们使用私有方法和字段?它们仍然可以在对象外部更改

问题描述 投票:0回答:1

我试图理解如何以及为什么使用 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)
playField.getJaxx = 'dog'
console.log('object2.getJaxx', object2.getJaxx)

控制台:

object1.jaxx dog
object2.getJaxx ƒ getJaxx(){
        return this.#jaxx
    }
object2.getJaxx dog

我写了一个名为 EasyAccessorJS 的类,但我在不了解发生了什么的情况下犹豫是否使用它。

那么——有什么意义呢?这一定是有原因的。我读过很多很多解释,但没有一个对我来说有意义。

我尝试设置私有字段以防止对该字段进行操作。

javascript object ecmascript-6 private private-members
1个回答
0
投票

私有方法和字段可以更改吗? 虽然在技术上可以通过反射或某些语言的其他方式访问和修改私有字段和方法,但通常不鼓励这样做。主要原因是:

可维护性:访问私有字段和方法会破坏封装,并可能导致代码脆弱且难以维护。 代码可读性:它使代码更难理解和遵循,因为它打破了类设置的预期抽象边界。

兼容性:将来可能会导致兼容性问题。如果类依赖外部代码访问其私有成员,则对这些成员的任何更改都可能会破坏外部代码。

总而言之,私有方法和字段对于保护对象数据的完整性、隐藏实现细节以及确保以受控和可预测的方式使用对象至关重要。虽然可以使用某些技术来访问它们,但这样做会破坏封装原则,应该避免。

© www.soinside.com 2019 - 2024. All rights reserved.