我有一些由很多短的getter /方法组成的类。
示例:
com.google.api.client.http.HttpResponseException: 403
Forbidden
{
"error": {
"errors": [
{
"domain": "global",
"reason": "insufficientPermissions",
"message": "Insufficient Permission"
}
],
"code": 403,
"message": "Insufficient Permission"
}
}
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1070)
at com.google.api.client.googleapis.media.MediaHttpDownloader.executeCurrentRequest(MediaHttpDownloader.java:245)
at com.google.api.client.googleapis.media.MediaHttpDownloader.download(MediaHttpDownloader.java:199)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeMediaAndDownloadTo(AbstractGoogleClientRequest.java:562)
at com.google.api.services.drive.Drive$Files$Export.executeMediaAndDownloadTo(Drive.java:3402)
at Quickstart.downloadFile(Quickstart.java:162)
at Quickstart.main(Quickstart.java:130)
具有类似内容的箭头功能可写如下:
get jQuery() {
return this.pageConfig.jQuery || jQuery;
}
这是一个单行,因此仅消耗垂直空间的1/3。
但它不是吸气剂,也不是方法。
是否有推荐的方式以单线形式编写吸气剂/方法? (如果可能,没有大括号,没有() => this.pageConfig.jQuery || jQuery;
关键字)
我的getter和方法不需要修改对象。他们只是在阅读。
答案 0 :(得分:4)
对于一个班轮,请按照这个:
get jQuery() {return this.pageConfig.jQuery || jQuery;}
箭头函数不适用于方法定义,因为它们使用词法this
,而方法需要对象this
。请记住,虽然箭头函数是一个很好的简写,但它们也会以一种通常与方法定义不兼容的方式影响this
的值。
答案 1 :(得分:3)
不,没有什么比(你可以跳过;
)
get jQuery() { return this.pageConfig.jQuery || jQuery }
更多解释
你不能使用箭头函数(() => this.pageConfig.jQuery || jQuery
),因为对于一个它不是一个getter函数而this
没有引用对象的上下文而是执行的上下文(这可能是对象但不必。
__defineGetter__
函数(some documentation)允许您定义一个getter。它已被弃用,可能比get
更复杂。但正如文档所说,它被广泛使用,可能永远不会被删除。
幸运的是:我全都是疯狂的解决方案
class Test {
constructor() {
this.pageConfig = {}
this.pageConfig.jQuery = "value"
let properties = {
'jQuery': () => this.pageConfig.jQuery || "Default",
'text': () => this.pageConfig.text || "Default"
}
for(let prop in properties) this.__defineGetter__(prop, properties[prop])
}
}
let t = new Test
console.log(t.jQuery)
console.log(t.text)
快乐的一面(但老实说,只需使用ECMA 5中的get
)
答案 2 :(得分:0)
漂亮的单线解决方案:
readonly jQuery = this.pageConfig.jQuery || jQuery
它很短,表现得像你期望的那样,并且不需要花括号。
答案 3 :(得分:0)
我当时正在考虑建立一个babel库来处理这个问题 我认为类似这样的东西
const weekDays = [
{
day: 'Sunday',
get input() {
return TimeRange(this.day)
}
// something like this
// get input() => TimeRange(this.day)
}
]