ES 5/ES 6の継承の違い

1756 ワード

classは、引き上げられると宣言していますが、賦値が初期化されないので、優先的に賦課値を初期化すると に入り、letに類似したconst変数になります.
const bar = new Bar(); // ok
function Bar() {
    this.bar = 42;
}
const foo = new Foo() // Foo is not defined
class Foo{
  constructor() {
    this.foo = 42;
  }
}
class内部起動厳格モード
function Bar(){
    baz = 42; // OK
}
const bar = new Bar();

class Foo {
    constructor() {
        foo = 42; // foo is not defined
    }
}
const foo = new Foo();
classのすべての方法(静的方法および例示的方法を含む)には、プロトタイプオブジェクトタイプがないので、「construct」もなく、newを使用して起動することができない.
function Bar() {
   this.bar = 42;
}

Bar.prototype.print = function (){
    console.log(this.bar)
}
const bar = new Bar();
cont barPrint = new bar.print() ; // 42
class Foo {
    constructor() {
        this.foo = 42;
    }
    print () {
        console.log(this.foo)
    }
}

const foo = new Foo();
const fooPrint = new foo.print(); // foo.print is not a constructor
newを使用してclassを呼び出す必要があります.
function Bar() {
    this.bar = 42;
}

const bar = Bar() ; // bar.bar: 42

class Foo() {
    constructor () {
        this.foo = 42;
    }
}

const foo = Foo() // Class constructor Foo cannot be invoked widhout 'new'
class内部でクラス名の書き換えができませんでした.
function Bar() {
    Bar = 'Baz' ; 
    this.bar = 42;
}
const bar = new Bar();
Bar // 'Baz'
bar.bar // 42

class Foo{
    constructor() {
        this.foo = 12;
        Foo = 'Fol' ; // err:Assignment to constant variable
    }
}

const foo = new Foo();
Foo = 'Fol'; //