JS的getter和setter

实例对象的getter和setter

    var o = {
        _a: 11,
        _b: 22,
        get a() {
            return this._a;
        },
        set a(v) {
            this._a = v * 2;
        },
        //此处b只写,不可读
        set b(v) {
            this._b = v;
        },
        //此处c只读,不可写
        get c() {
            return Math.sqrt(this._a * this._a + this._b * this._b);
        },
        print: function() {
            console.log(this.a, this.b, this.c);
        }
    };
    o.print();
    o.a = 33;
    o.b = 44;
    o.print();
    o.c = 55; //此处更改c不起作用,也不会报错
    o.print();
    o._a = 33; //这就是恶心的地方,没有权限控制
    o.print();

输出:

11 undefined 24.596747752497688
66 undefined 79.32212806020776
66 undefined 79.32212806020776
33 undefined 55

类对象的getter和setter

    function Class() {
        //私有变量
        var a = 11,
            b = 22;
        //定义a,b,c的getter和setter,此处定义的a,b,c是公有变量
        Object.defineProperties(this, {
            a: {
                get: function() {
                    return a;
                },
                set: function(v) {
                    a = v * 2;
                }
            },
            b: { //此处b只写,不可读,读取时返回undefined
                set: function(v) {
                    b = v;
                }
            },
            c: { //此处c只读,不可写,给c赋值也不会报错
                get: function() {
                    return Math.sqrt(a * a + b * b);
                }
            }
            /*
            定义单个属性可以这样:
            Object.defineProperty(obj, "propertyName", {
                get:function(){}, set:function(v){}
            });
            */
        });
        this.print = function() {
            console.log(this.a, this.b, this.c);
        };
    }

    var o = new Class();
    o.print();
    o.a = 33;
    o.b = 44;
    o.print();
    o.c = 55;
    o.print();

输出:

11 undefined 24.596747752497688
66 undefined 79.32212806020776
66 undefined 79.32212806020776

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值