繁体   English   中英

ES6 getter /方法没有花括号

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM