2017-03-01 34 views
2

我有一些由许多简短的getter/methods组成的类。ES6 getter /无花括号的方法

实施例:

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

具有类似内容的箭头函数可如下写为:

() => this.pageConfig.jQuery || jQuery; 

哪个是一衬垫和只的垂直空间1/3因此消耗。

但它不是一个吸气剂也不是一种方法。

是否有一种以单线形式书写getter/methods的推荐方法? (如果没有大括号也没有return关键字)

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

+7

通常,您不想使用箭头语法来定义方法,因为那样您就不会得到'this'的值来指向对象,而这个对象就是您想要的对象上的方法。请记住,箭头函数不仅是一种语法快捷方式,它们还使用词汇'this',这不是您想要的对象上的方法。 – jfriend00

+2

如果这是你的第一个例子,那么你的第一个例子可以折叠成一行。只需保留大括号和“返回”,并将其全部放在一行上。 – jfriend00

回答

0

尼斯的单行解决方案:

readonly jQuery = this.pageConfig.jQuery || jQuery 

它很短,表现得像你期望它从吸气剂,并且不需要大括号。

2

对于一个衬垫,只要进入这个:

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

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

2

没有,没有什么比短(你可以跳过;

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

详细说明一下

不能使用箭头功能(() => this.pageConfig.jQuery || jQuery),因为对于一个它不是一个吸气功能,并且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

+0

疯狂的解决方案。我喜欢:-D – ideaboxer