Javascript 您能否使用';这个';?

Javascript 您能否使用';这个';?,javascript,ecmascript-6,Javascript,Ecmascript 6,我可以这样做: class Temp { constructor() { this.foo = 'foo' this.bar = 'bar' } getObj() { let boo = 'boo' return { boo } } } console.log(new Temp().getObj()) //prints { boo: 'boo' } 那么我

我可以这样做:

class Temp {
    constructor() {
        this.foo = 'foo'
        this.bar = 'bar'
    }

    getObj() {

        let boo = 'boo'
        return {
            boo
        }
    }
}
console.log(new Temp().getObj())
//prints { boo: 'boo' }
那么我该如何做到这一点:

class Temp {
    constructor() {
        this.foo = 'foo'
        this.bar = 'bar'
    }

    getObj() {

        return {
            this.foo
        }
    }
}
console.log(new Temp().getObj())

是否有特殊语法或不受支持?

如果要使用解构,需要将属性提取为常量,然后使用速记属性名称:

class-Temp{
构造函数(){
this.foo='foo'
this.bar='bar'
}
getObj(){
const{foo}=this;
返回{
福
}
}
}

console.log(new Temp().getObj())
如果“foo”是公共属性,则可以执行以下操作:

class Foo {
  constructor() {
    this.foo = 'foo';
  }
}

const { foo } = (new Foo());
console.log(foo); // 'foo'

我想你真正想要的是:

return { ...this };
或者,如果要忽略某些属性:

 const { bar, ...take } = this;
 return take;

不,这还不受支持。您必须通过
{foo:this.foo}
进行操作


然而,对于速记属性定义有一个改进,它允许您将
{this.foo}
作为对象文字来编写。

我不认为这是以我期望的方式进行的解构。请注意,在我的示例中,键与var的名称相同,而不必键入它。我添加了一个带有解构的答案。是的,我的问题令人困惑。我把速记属性和解构混合在一起(也就是说,我对js相当陌生),为什么需要另一种特殊的语法?为了摆脱
{foo:this.foo,}
?@Jonas Wilms一致性和更低的错误风险中的四个讨厌的(!!)字符?假设这只是一个示例,我可能有一个巨大的键/值对列表。。。。以奇怪的语法混合为代价。等等。。。您只是想克隆类还是只提取某些值?谢谢您的编辑!嗯,现在我觉得我需要更改问题的标题。所以我问你是否可以将速记属性名与“this”一起使用。@u84six你不能。hmmm。。。块语句和对象文字之间总是存在混淆,不确定这一提议是否会使区分变得更加困难…@Jonaswillms通常情况下,很明显,您处于表达式上下文中-当您阅读整个代码时,没有看到一段可能两者兼而有之的摘录。我真的很希望这个提议能被接受,我多年来一直想要这个…