ES6 js "with" 关键字

4
在深网中,我遇到了像这样的结构:class A extends B with C { ... },我现在没有链接,但它就像是在扩展抽象类时的宏。
这是标准吗?(我搜索过,只找到旧的with已经被删除了,chrome内联控制台会抛出错误)

请问您能否提供您找到它的链接?不,它不在ES7中,虽然它曾是许多类提案的一部分。 - Bergi
可能那是一个提议,因为如果我能再次找到它 - 我就不会问这个问题了。 - Daniel Mizerski
1
这篇文章涉及到ES6类中的Dart混合语法 - CodingIntrigue
2个回答

2

这不是ECMAScript 6类标准的一部分。

请参见此链接

在某些编程语言中,with关键字用于表示多重继承。

例如,Scala使用with关键字让类继承特征(trait)。

trait Drawable {
    def draw() { }
}

trait Cowboy extends Drawable {
    override def draw() { println("Bang!") }
}

trait Artist extends Drawable {
    override def draw() { println("A pretty painting") }
}


class CowboyArtist extends Cowboy with Artist

2

这不是标准写法。根据附录A.4 - 函数和类,语法应该是:

<i>ClassDeclaration</i><sub>[Yield, Default]</sub> :
    <b>class</b> <i>BindingIdentifier</i><sub>[?Yield]</sub> <i>ClassTail</i><sub>[?Yield]</sub>
    [+Default] <b>class</b> <i>ClassTail</i><sub>[?Yield]</sub>

<i>ClassExpression</i><sub>[Yield]</sub> :
    <b>class</b> <i>BindingIdentifier</i><sub>[?Yield]opt</sub> <i>ClassTail</i><sub>[?Yield]</sub>

<i>ClassTail</i><sub>[Yield]</sub> :
    <i>ClassHeritage</i><sub>[?Yield]opt</sub> <b>{</b> <i>ClassBody</i><sub>[?Yield]opt</sub> <b>}</b>

<i>ClassHeritage</i><sub>[Yield]</sub> :
    <b>extends</b> <i>LeftHandSideExpression</i><sub>[?Yield]</sub>

所以,ClassTail 是包括可选的 extends something 和类主体的部分。而且那个 something 必须是一个 LeftHandSideExpression,里面没有任何 with

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接