Javascript ES6无花括号的getter/method

Javascript ES6无花括号的getter/method,javascript,typescript,methods,ecmascript-6,getter,Javascript,Typescript,Methods,Ecmascript 6,Getter,我有一些由许多短getter/方法组成的类 例如: get jQuery() { return this.pageConfig.jQuery || jQuery; } 具有类似内容的箭头函数可以编写如下: () => this.pageConfig.jQuery || jQuery; 这是一个单一的班轮,因此只消耗1/3的垂直空间 但它既不是一个getter,也不是一种方法。 是否有一种推荐的以一行代码的形式编写getter/方法的方法(如果可能,不带大括号,也不带return关键

我有一些由许多短getter/方法组成的类

例如:

get jQuery() {
  return this.pageConfig.jQuery || jQuery;
}
具有类似内容的箭头函数可以编写如下:

() => this.pageConfig.jQuery || jQuery;
这是一个单一的班轮,因此只消耗1/3的垂直空间

但它既不是一个getter,也不是一种方法。

是否有一种推荐的以一行代码的形式编写getter/方法的方法(如果可能,不带大括号,也不带
return
关键字)


我的getter和方法不需要修改对象。他们只是在阅读。

对于一行,只需执行以下操作:

get jQuery() {return this.pageConfig.jQuery || jQuery;}

箭头函数不用于方法定义,因为它们使用词法
this
,而方法需要对象
this
。请记住,虽然箭头函数是一种很好的速记方式,但它们也会以一种通常与方法定义不兼容的方式影响
this
的值。

不,没有比它短的(您可以跳过

再解释一下

不能使用arrow函数(
()=>this.pageConfig.jQuery | | jQuery
),因为它不是一个getter函数,
这个
不是指对象的上下文,而是指执行的上下文(可以是对象,但不必是对象)

有/曾经有
\uuu defineGetter\uuu
函数()可以让你定义一个getter。它现在被弃用了,可能会比
get
更复杂。但是正如文档所说,它被广泛使用,可能永远不会被删除

你很幸运:我完全支持疯狂的解决方案

类测试{
构造函数(){
this.pageConfig={}
this.pageConfig.jQuery=“value”
让属性={
'jQuery':()=>this.pageConfig.jQuery | |“默认”,
'text':()=>this.pageConfig.text | |“默认”
}
对于(让属性中包含prop)此属性。_定义设置器_;(prop,properties[prop])
}
}
设t=新测试
console.log(t.jQuery)

console.log(t.text)
Nice单行程序解决方案:

readonly jQuery = this.pageConfig.jQuery || jQuery

它很短,行为就像你从getter那里期望的那样,并且不需要花括号。

我正在考虑建立一个babel库来处理这个问题 我觉得像这样的东西会很好看

const weekDays = [
            {
                day: 'Sunday',
                get input() {
                    return TimeRange(this.day)
                }
                // something like this
                // get input() => TimeRange(this.day)
            }
]

通常,您不希望使用箭头语法定义方法,因为这样您将无法获得
this
的值来指向对象,而该对象正是您想要用于对象上的方法的对象。请记住,箭头函数不仅是一个语法快捷方式,它们还使用词法
this
,而不是您想要用于对象上的方法的词法你的第一个例子可以折叠成一行,如果你只想这样做的话。只需保留大括号和
return
并将其全部放在一行。疯狂的解决方案。我喜欢:-D
const weekDays = [
            {
                day: 'Sunday',
                get input() {
                    return TimeRange(this.day)
                }
                // something like this
                // get input() => TimeRange(this.day)
            }
]