getter、setter的写法

探讨C++、Java、C#及JavaScript中私有成员的访问方式,介绍getter和setter方法的应用,以及JavaScript中如何利用property实现类似功能。

上篇我们说,C++类的私有成员,外部(包括子类)是不能直接访问的,需要通过getA()这个方法访问,getA()叫做ClassA的getter方法(至于为什么叫getter,不清楚)。Java中也有类似不成文的规定:如果要访问一个类的private成员,就需要写getter方法。

C#甚至专门有一种叫“property”的语法,实现访问类的私有成员:

//getter写法
public class  Student
{
    private string name;

    public string GetName() {
        return name;
    }
}

//property写法
public class Student 
{
    private string name;

    public string Name {
        get {
            return name;
        }
    }
}

上篇,我们还说了,在JavaScript中,下划线的形式并不能真正将变量变成私有的,你仍可以直接修改它的值:

class ClassA {
    constructor(value) {
        this._a = value;
    }

    getA() {
        return this._a;
    }
}

let obj = new ClassA(100);
obj._a = 1000;

但这不是JavaScript的getter标准写法,标准写法是:

class ClassA {
    constructor(value) {
        this._a = value;
    }

    get A() {
        return this._a;
    }
}

let obj = new ClassA(100);
obj._a = 1000;

但不能通过A(getter)修改值了,而需要使用setter,否认会报Cannot set property A of #<ClassA> which has only a getter(JavaScript严格模式下)

class ClassA {
    constructor(value) {
        this._a = value;
    }

    get A() {
        return this._a;
    };

}

let obj = new ClassA(100);
obj._a = 123;// 仍然可以这样写
obj.A = 123;//不能这样写

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LM Wang

感恩这个世界~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值