Javascript 在ES6中,是否允许分解类实例属性?

Javascript 在ES6中,是否允许分解类实例属性?,javascript,ecmascript-6,destructuring,Javascript,Ecmascript 6,Destructuring,假设我有以下代码: class Foo { constructor() { this.a = 1; this.b = 'something'; } someMethod() { // Is this legal? let { a, b } = this; } } someMethod中的解构赋值合法吗 我的直觉是它很好,但我在任何文档中都没有看到这种用法。它目前在Babel中工作,但可能是因为Ba

假设我有以下代码:

class Foo {
    constructor() {
        this.a = 1;
        this.b = 'something';
    }

    someMethod() {
        // Is this legal?
        let { a, b } = this;
    }
}
someMethod
中的解构赋值合法吗

我的直觉是它很好,但我在任何文档中都没有看到这种用法。它目前在Babel中工作,但可能是因为Babel正在将类转换为函数。我的理解是(几乎)JS原型中的所有内容都是从对象继承的,所以我可能认为对于类和类实例也是如此


我看到的唯一一个引用是在引擎盖下发生的事情,它指定JS引擎调用内部方法
ToObject
,当遇到
null
undefined
时,它只会抛出一个TypeError。但是不要明确提到类实例。

明确允许解构对象,这是一项功能。
仅指对象。这没什么特别的。
只要
这个
指的是一个对象,这是绝对正确的*


*
根据调用
someMethod
的方式,此
可能不会引用对象,例如
Foo.someMethod.apply(null)
。但无论如何,你真的有更大的问题。

与你的问题无关,但是你有什么特别的原因使用let而不是var吗?是的,但是
()
Foo
isn之后,很多程序员每次都会使用
let
,因为他们听说这是个好主意;无论是否有任何方块在使用中。。。你必须用
来解决问题,让
?@VladNicula对于一个最小(几乎)有效的例子来说似乎是一个奇怪的问题,这个例子显然是为了展示问题的原理而设计的about@all,我只是个古玩,如果有什么好处的话。有趣的是,你们中的大多数人是如何从我的问题中得到一种消极的感觉的:)当然,谢谢,因为其他示例只处理普通对象,而不是类instances@baseten你的好奇心是可以理解的广义地说,
语法比现有的ES5使用函数构造函数的方法更有用,只需要一些语义差异,因此最终得到的是本质上相同的东西:一个具有可以访问和分解的属性的对象。(主要区别很小,比如类必须使用
new
关键字调用,类声明不被提升,原型属性不可枚举,子类化的工作方式有点不同等等。)