我正在尝试了解以下优点(如果有):
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
用一只眼睛注视着JavaScript中将来的类属性/方法的可见性吗?那是有道理的-私有财产的吸气剂。但是,既然还没有,我看不到上面的意思。
有人可以启发我吗?
[在您将name
定义为吸气剂的同时,未定义setter的情况下,如果您尝试更改其值,例如obj.name = "foo"
,则不会发生任何事情。
另一方面,如果您尝试更改第二个对象上的name
属性,这样做不会阻止您。
一个区别是,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);