class 私有变量

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

实现私有变量的方式:

(一)约定命名

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值