我最近了解了一个新的Javascript特性(私有实例字段(,它允许您在使用ES6类时使某些对象属性或方法私有。因此,您不能使用object.properties或objectproperty=value来查看或设置它们。但是,如果您只将对象本身记录到控制台,它将显示所有属性,包括所谓的私有字段。
Javascript还阻止了子类查看或编辑信息。它还阻止使用Object.entries、Object.keys和Object.values读取这些值。所以我的问题是,我如何报告这一点,或者可能帮助在较新版本的Javascript中实现。
我知道你们中的很多人可能会说,你不应该在浏览器中内联敏感信息,但为什么首先要有私有类功能呢。
我个人可以想到一些情况,你可能想隐藏可能在幕后处理的信息。比如你可能会解密或某种需要时间在后端处理的算法,所以你只想运行一次。然而,你需要为多个功能返回信息,所以你想将其存储在客户端。同时,尽管你不希望客户能够看到这些信息。
示例:控制台中的信息是可读的。编辑:(您可能需要将代码片段复制并粘贴到一个单独的js文件中,或者在浏览器中运行它来查看问题。(
对象可查看
class Account {
#pin;
constructor(owner, pin) {
this.owner = owner;
this.#pin = pin;
}};
const acc = new Account('John Doe', 1234);
console.log(acc); //Shows you pin in object.
房地产是私人的,尽管
class Account {
#pin;
constructor(owner, pin) {
this.owner = owner;
this.#pin = pin;
}};
const acc = new Account('John Doe', 1234);
console.log(acc.#pin); //Won't allow you to see pin.
私有方法和属性并非用于隐藏敏感数据。
它用于向使用它的开发人员隐藏某些属性或方法。这对于隐藏内部变量和方法以防止覆盖或读取非常有用。
请参阅封装中的更多信息。
然而,JavaScript没有私有字段。JS开发人员通常会使用一个前导_
来表示某个变量或方法仅供内部使用。但是,它并没有限制对它的访问
新的#
是一个访问修饰符(类似于java中的private
(,它在语法级别实现私有字段,而不是一个导致_
的变通方法。