ES 6はノート—クラスの基本文法を勉強します.

1593 ワード

1、はじめに
JavaScriptはプロトタイプに基づいて継承された文法です.ES 5では対象向け構造の「親類」を実現するための書き方は、基本的な属性を構造関数で書き込み、プロトタイプを通して基本的な方法を書き込むのが一般的です.
function Point(x, y) {
  this.x = x;
  this.y = y;
}

Point.prototype.toString = function () {
  return '(' + this.x + ', ' + this.y + ')';
};

var p =new Point(1,2)
ES 6のクラスはシンタックスキャンディーとして見られます.ES 6に導入された新しい属性のクラスは、classによって対象の原型の書き方がより明確になり、対象に向けてプログラミングされた文法のようになります.上の例はES 6のクラスによって書き換えられます.
//    Point 
class Point {
  constructor(x,y) {
    this.x = x;
    this.y = y;
  }

  toString() {
    return '(' + this.x + ', ' + this.y + ')';
  }
}
  • 厳格なモードクラスとモジュールの内部は、デフォルトは厳格なモードですので、use strictを使用して実行モードを指定する必要はありません.コードをクラスとモジュールの中に書くと、厳格なモードだけが利用できます.
    2、クラスのインスタンスオブジェクト
    私たちが作成したクラスの実例的なオブジェクトの書き方は、ES 5と全く同じで、すなわちnewコマンドを使用して、インスタンスの属性は明示的に定義されない限り、プロトタイプに定義されます(classに定義されます).以下に例を書きます.
    //   
    class Point {
    
      constructor(x, y) {
        this.x = x;
        this.y = y;
      }
    
      toString() {
        return '(' + this.x + ', ' + this.y + ')';
      }
    
    }
    
    var point = new Point(2, 3);
    
    point.toString() // (2, 3)
    
    //                      
    point.hasOwnProperty('x') // true
    point.hasOwnProperty('y') // true
    point.hasOwnProperty('toString') // false
    point.__proto__.hasOwnProperty('toString') // true
    
  • はES 5と同じで、クラスのすべてのインスタンスが一つのプロトタイプオブジェクトを共有しています.
    var p1 = new Point(2,3);
    var p2 = new Point(3,2);
    
    p1.__proto__ === p2.__proto__     //true
    
    
    3、プライベート方法とプライベート属性