在深网中,我遇到了像这样的结构:
这是标准吗?(我搜索过,只找到旧的
class A extends B with C { ... }
,我现在没有链接,但它就像是在扩展抽象类时的宏。这是标准吗?(我搜索过,只找到旧的
with
已经被删除了,chrome内联控制台会抛出错误)class A extends B with C { ... }
,我现在没有链接,但它就像是在扩展抽象类时的宏。with
已经被删除了,chrome内联控制台会抛出错误)这不是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
这不是标准写法。根据附录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>
extends something
和类主体的部分。而且那个 something
必须是一个 LeftHandSideExpression,里面没有任何 with
。