2016-09-05 6 views
3

深いインターネットでは、class A extends B with C { ... }のような構造に遭遇しましたが、今はリンクしていません。抽象クラスを拡張しながら、クラスのマクロのようでした。ES6 js "with"キーワード

これは標準ですか? (私はグーグルで、唯一の古いwithが今削除され、クロムインラインコンソールがエラーをスローすることを見つける)

+0

見つけた場所にリンクしてください。いいえ、それはES7にはありませんが、多くのクラスの提案の一部です。 – Bergi

+0

おそらくそれは提案でした。もし私がもう一度それを見つけることができれば - 私はこの質問をしません。 –

+1

[この記事は](http://justinfagnani.com/2015/12/21/real-mixins-with-javascript-classes/)[ダーツのmixin構文](https://www.dartlang.org/articles/)を参照してください。言語/ミックスイン)をES6クラス – CodingIntrigue

答えて

2

とから拡張できる特徴を持っています。 Annex A.4 - Functions and Classesからは、構文が

ClassDeclaration[Yield, Default] : 
    classBindingIdentifier[?Yield]ClassTail[?Yield] 
    [+Default] classClassTail[?Yield] 

ClassExpression[Yield] : 
    classBindingIdentifier[?Yield]optClassTail[?Yield] 

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

ClassHeritage[Yield] : 
    extendsLeftHandSideExpression[?Yield]

あるので ClassTailextends somethingオプションとクラス本体の両方を含んでいる部分です。そしてsomethingのLeftHandSideExpressionでなければなりません。withはそこにありません。

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