在JavaScript中,我们经常使用私有性质(private properties)来隐藏对象的一些属性和方法,从而保护它们免受外部访问。本文将介绍在JavaScript中实现6种不同类型的私有性质的方法,并提供详细的示例代码。
1. 闭包(Closures)
闭包是JavaScript中最常用的私有性质之一。它通过在函数内部创建一个作用域来隐藏函数的变量和参数。这使得外部无法访问这些变量和参数,从而保护它们免受意外修改。
以下是一个简单的示例:
-------- --------- - --- ----- - -- -------- ----------- - -------- ------------------- - ------ ---------- - ----- - - ---------- ---- -- -- - ---- -- -- -
在上面的示例中,counter
函数返回了一个内部函数 increment
。该函数可以访问其父函数 counter
的变量 count
。由于 count
变量仅在 counter
函数内部定义,因此它对外部是不可见的。只有 increment
函数可以访问和修改 count
变量。
2. IIFE(Immediately Invoked Function Expressions)
IIFE是立即调用的函数表达式(Immediately Invoked Function Expressions)的缩写。它是一种在定义后立即执行函数的方式。
以下是一个示例:
----- ------- - ----------- - --- ----- - -- ------ ---------- - -------- ------------------- - ----- ---------- -- -- - ---------- -- -- -
在上面的示例中,我们使用了自执行函数(IIFE)来创建一个私有性质。变量 count
只能被返回的函数访问和修改,这使得它对外部是不可见的。
3. Symbol
Symbol是一种新的原始数据类型,用于创建唯一且不可变的标识符。由于Symbol的值是不可改变的,因此可以用它作为对象属性的键名来实现私有性质。
以下是一个示例:
----- ----- - --------------- ----- ------ - ----------------- - ----------- - ----- - --------- - ------ ------------ - - ----- - - --- ------------- ------------------------- -- -- -- --------------------- -- -- ---------
在上面的示例中,我们使用了Symbol来创建一个私有属性 _name
,并将其用作Person
类的属性。由于 _name
是一个Symbol值,因此只能通过类的方法来访问它,外部无法直接访问。
4. WeakMap
WeakMap是一种内置的JavaScript集合类型,它可以存储键值对,并且只支持对象作为键名。WeakMap的键名是弱引用的,这意味着如果对象被垃圾回收,键值对也会被自动删除。
以下是一个示例:
----- ------------- - --- ---------- ----- ------ - ----------------- - ----------------------- -------- - --------- - ------ ----------------------------- - - ----- - - --- ------------- ------------------------- -- -- -- ---------------------------------- -- -- ---------
在上面的示例中,我们使用WeakMap来存储私有属性。我们将每个Person
实例作为键名存储,并将其私有属性作为值存储在WeakMap中。由于WeakMap的键名是弱引用的,所以即使Person
实例被垃圾回收,它的私有属性也会被自动删除。
5. Proxy
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/8673