【发布时间】:2020-01-02 19:50:16
【问题描述】:
我试图了解以下优势(如果有的话):
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 中未来的类属性/方法可见性?这是有道理的——私有财产的吸气剂。但既然还没到这里,我看不出上面的意思。
谁能赐教?
【问题讨论】:
-
您可以拥有虚拟属性,而不仅仅是方法调用。曾经使用过 Knockout.JS 吗?它具有可通过函数调用访问的可观察类型(它允许您订阅更改,甚至订阅原语)。例如,如果你有一些长链,你最终会得到
myViewModel.config().table().header.firstName。您必须记住这些属性中的 哪些 是可观察的,而不是调用那些是的。如果您将header更改为可观察对象,则需要更新对它的 all 调用。 -
某些平台实际上已经支持私有字段,例如节点 13,我同意结合这些,getter 更有意义
-
可能是 stackoverflow.com/questions/42342623/… 的副本(甚至有相同的代码示例)。
-
谢谢大家 - 这里有一些伟大的贡献。正如我所怀疑的,它基本上只是语法和可读性。我只是想确保我没有遗漏两者之间隐含的行为差异。
标签: javascript oop getter-setter ecmascript-5