class 私有变量

博客介绍了 ES6/ES7 类中私有变量的概念,即只能在类内部访问的变量。同时阐述了实现私有变量的四种方式,包括约定命名、闭包、立即执行函数和利用 symbol 特性,并分析了每种方式的优缺点,如约定命名简单但可被 for...in 访问等。

私有变量:只能在类的内部访问的变量,无法在外部访问

实现私有变量的方式:

(一)约定命名

class A {
    constructor(x) {
        this._x = x;
    }

    showX() {
        return this._x;
    }
}

console.log(a._x); // abc
console.log(a.showX()); // abc

优点:简单、快捷

缺点:可以通过 for ... in 访问到

(二)闭包

class B {
    constructor(x) {
        let _x = x;
        this.showX = function () {
            return _x;
        }
    }
}

let b = new B('instanceB');
console.log(b._x); // undefined
console.log(b.showX());// instanceB

优点:从本质上解決私有变量问题

缺点:

  • 私有变量的方法不能定义到原型链上,只能定义到构造函数(实例)上。
  • 增加了额外的性能开销
  • 构造函数中包含方法,后期维护困难

(三)立即执行函数

let C = (function() {
    let _x;

    class C {
        constructor(x) {
            _x = x;
        }

        showX() {
            return _x;
        }
    }

    return C;
}());

let c = new C('ccc');
console.log(c._x); //undefined
console.log(c.showX()); //ccc

优点:解決了闭包的问题

缺点:带来了一点额外的性能开销

(四)利用 symbol 特性

let _y = Symbol('y');

class D{
    constructor(x) {
        this[_y] = x;
    }

    showY() {
        return this[_y];
    }
}

let d = new D('test');
console.log(d._y); //undefined
console.log(d.showY()); //test

 

Python中的私有变量是指在类中以双下划线“__”开头的变量,这些变量只能在类内部访问,外部无法直接访问。私有变量的作用是保护数据,防止外部对数据的直接修改,从而提高程序的安全性和稳定性。 在Python中,私有变量的访问需要通过特殊的方式进行,即使用“_类名__变量名”的方式进行访问。例如,如果一个类中定义了一个私有变量“__name”,那么在类内部可以直接访问该变量,但在类外部则需要使用“_类名__name”的方式进行访问。 下面是一个示例代码,演示了Python中私有变量的定义和访问: class Person: def __init__(self, name, age): self.__name = name self.__age = age def get_name(self): return self.__name def get_age(self): return self.__age p = Person("Tom", 18) print(p.get_name()) # 输出:Tom print(p.get_age()) # 输出:18 print(p.__name) # 报错:'Person' object has no attribute '__name' print(p._Person__name) # 输出:Tom 在上面的代码中,Person类定义了两个私有变量“__name”和“__age”,并提供了两个公共方法“get_name”和“get_age”用于获取这两个变量的值。在类外部,无法直接访问私有变量“__name”和“__age”,需要通过公共方法进行访问。同时,如果在类外部使用“__name”和“__age”进行访问,会导致程序报错。而使用“_Person__name”和“_Person__age”进行访问,则可以成功获取私有变量的值。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值