[英]ES6 getter/method without curly braces
我有一些由许多短的getter /方法组成的类。
例:
get jQuery() {
return this.pageConfig.jQuery || jQuery;
}
具有类似内容的箭头函数可以写成如下:
() => this.pageConfig.jQuery || jQuery;
这是一个单线,因此只消耗垂直空间的1/3。
但它不是吸气剂,也不是方法。
是否有推荐的方式以单线形式编写吸气剂/方法? (如果可能没有花括号而没有return
关键字)
我的getter和方法不需要修改对象。 他们只是在读书。
对于一个班轮,只需这样:
get jQuery() {return this.pageConfig.jQuery || jQuery;}
箭头功能不是方法定义,因为它们使用的词汇this
,而方法希望对象this
。 请记住,而箭头的功能是一个很好的简写,它们也会影响的值this
在某种程度上,是不是通常的方法定义兼容。
不,没有什么比(你可以跳过;
)更短
get jQuery() { return this.pageConfig.jQuery || jQuery }
多一点解释
你不能使用箭头函数( () => this.pageConfig.jQuery || jQuery
),因为对于一个它不是一个getter函数, this
并不是指对象的上下文而是执行的上下文(这可能是对象但不必。
有/ __defineGetter__
函数( 一些文档 )允许您定义一个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
)
漂亮的单线解决方案:
readonly jQuery = this.pageConfig.jQuery || jQuery
它很短,表现得像你期望的那样来自吸气剂,并且不需要花括号。
我正在考虑建立一个babel库来处理这个问题,我觉得这样看起来很奇特
const weekDays = [
{
day: 'Sunday',
get input() {
return TimeRange(this.day)
}
// something like this
// get input() => TimeRange(this.day)
}
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.