在JavaScript中6类私有性质

在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