ES6 getter/method 没有花括号
ES6 getter/method without curly braces
我有一些 类,其中包含许多短 getters/methods。
示例:
get jQuery() {
return this.pageConfig.jQuery || jQuery;
}
类似内容的箭头函数可以这样写:
() => this.pageConfig.jQuery || jQuery;
这是单行的,因此只占用垂直方向的 1/3 space。
但它不是 getter 也不是方法。
getters/methods有没有推荐的单行写法? (如果可能,没有花括号和 return
关键字)
我的 getters 和方法不需要修改对象。他们只是在读书。
对于一个班轮,只需这样做:
get jQuery() {return this.pageConfig.jQuery || jQuery;}
箭头函数不适用于方法定义,因为它们使用词法 this
,而方法需要对象 this
。请记住,虽然箭头函数很好 shorthand,但它们也会以通常与方法定义不兼容的方式影响 this
的值。
不,没有什么比(你可以跳过 ;
)
get jQuery() { return this.pageConfig.jQuery || jQuery }
多一点解释
您不能使用箭头函数 (() => this.pageConfig.jQuery || jQuery
),因为它不是 getter 函数,而且 this
不引用对象的上下文但是执行的上下文(可以是对象但不一定是。
is/was __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
)
不错的单行解决方案:
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)
}
]
我有一些 类,其中包含许多短 getters/methods。
示例:
get jQuery() {
return this.pageConfig.jQuery || jQuery;
}
类似内容的箭头函数可以这样写:
() => this.pageConfig.jQuery || jQuery;
这是单行的,因此只占用垂直方向的 1/3 space。
但它不是 getter 也不是方法。
getters/methods有没有推荐的单行写法? (如果可能,没有花括号和 return
关键字)
我的 getters 和方法不需要修改对象。他们只是在读书。
对于一个班轮,只需这样做:
get jQuery() {return this.pageConfig.jQuery || jQuery;}
箭头函数不适用于方法定义,因为它们使用词法 this
,而方法需要对象 this
。请记住,虽然箭头函数很好 shorthand,但它们也会以通常与方法定义不兼容的方式影响 this
的值。
不,没有什么比(你可以跳过 ;
)
get jQuery() { return this.pageConfig.jQuery || jQuery }
多一点解释
您不能使用箭头函数 (() => this.pageConfig.jQuery || jQuery
),因为它不是 getter 函数,而且 this
不引用对象的上下文但是执行的上下文(可以是对象但不一定是。
is/was __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
)
不错的单行解决方案:
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)
}
]