JavaScript getter方法的意义是什么?

问题描述 投票:3回答:1

我正在尝试了解以下优点(如果有):

const obj = {
    forename: 'Foo',
    surname: 'Bar',
    get name() {
        //yes I get that I can do other stuff here
        return this.forename+' '+this.surname;
    }
}
alert(obj.name); //Foo Bar

.........

const obj = {
    forename: 'Foo',
    surname: 'Bar',
    name() {
        return this.forename+' '+this.surname;
    }
}
alert(obj.name()); //Foo Bar

我读过(1; 2; 3),但似乎看不到任何好处。

用一只眼睛注视着JavaScript中将来的类属性/方法的可见性吗?那是有道理的-私有财产的吸气剂。但是,既然还没有,我看不到上面的意思。

有人可以启发我吗?

javascript oop getter-setter ecmascript-5
1个回答
0
投票

[在您将name定义为吸气剂的同时,未定义setter的情况下,如果您尝试更改其值,例如obj.name = "foo",则不会发生任何事情。

另一方面,如果您尝试更改第二个对象上的name属性,这样做不会阻止您。


0
投票

一个区别是,typeof在使用getter时将实际工作[[按预期,即它将返回getter返回的原语的实际类型,而使用方法将始终返回function

const objGetter = { forename: 'Foo', surname: 'Bar', get name() { return `${ this.forename } ${ this.surname }`; } } const objGetterLogic = { forename: undefined, surname: 'Bar', get name() { return this.forename ? this.surname : 3; } } const objMethod = { forename: 'Foo', surname: 'Bar', name() { return `${ this.forename } ${ this.surname }`; } } console.log(`objGetter`, typeof objGetter.name); console.log(`objMethod`, typeof objMethod.name); console.log(`objGetterLogic (without forename)`, typeof objGetterLogic.name); objGetterLogic.forename = 'Alice'; console.log(`objGetterLogic (with forename)`, typeof objGetterLogic.name);
© www.soinside.com 2019 - 2024. All rights reserved.