ES6 js“with”关键字

时间:2016-09-05 19:25:57

标签: javascript syntax ecmascript-6

在深度互联网中,我遇到像class A extends B with C { ... }这样的结构,我现在没有链接,在扩展抽象类时,它就像类的宏。

这是标准的吗? (我用谷歌搜索,只找到现在删除的旧with,chrome内联控制台抛出错误)

2 个答案:

答案 0 :(得分:2)

这不是ECMAScript 6 Classes标准的一部分。 见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes

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

例如,Scala具有哪些类可以使用with关键字

进行扩展
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

答案 1 :(得分:2)

它不标准。从Annex A.4 - Functions and Classes开始,语法为

ClassDeclaration[Yield, Default] :
    class BindingIdentifier[?Yield] ClassTail[?Yield]
    [+Default] class ClassTail[?Yield]

ClassExpression[Yield] :
    class BindingIdentifier[?Yield]opt ClassTail[?Yield]

ClassTail[Yield] :
    ClassHeritage[?Yield]opt { ClassBody[?Yield]opt }

ClassHeritage[Yield] :
    extends LeftHandSideExpression[?Yield]

所以 ClassTail 是包含可选extends something和类主体的部分。并且something必须是 LeftHandSideExpression ,其中没有任何with