JavaScript ES 6のクラスの本質

1808 ワード

es6-コード1
class Math {
    //     
    constructor(x,y) {
        this.x = x;
        this.y = y;
    }

    add() {
        return this.x + this.y;
    }
}


let math = new Math(1,2);
console.log(math.add());
上のコードはjava C〓〓などとこのように似ています.es5-コード二

//          
function Math(x, y) {
    this.x = x;
    this.y = y;
}

//        add  ,            
Math.prototype.add = function() {
    return this.x + this.y;
}

var math = new Math(1,2);
console.log(math.add())
上记のコードの一とコードの二は同じです.
実は、es 6のクラスの本当の本質は文法飴です.
信じません.下のを見てください.このMathはどんなタイプですか?
class Math {
    // ...
}
console.log(typeof Math);
答えはfunctionです.
また
Math === Math.prototype.constructor; // true
これはes5のコードの中で同じです.
function Math(x, y) {
    this.x = x;
    this.y = y;
}
typeof Math; // "funtion"
Math === Math.prototype.constructor; // true 
一緒に置く:es5
function Math(x, y) {
    this.x = x;
    this.y = y;
}

//        add  ,            
Math.prototype.add = function () {
    return this.x + this.y;
}

var math = new Math(1,2);

console.log(typeof Math);  // "function"

console.log(Math === Math.prototype.constructor); // true

//         ===        
console.log(math.__proto__ === Math.prototype); // true

es6
class Math {
    //     
    constructor(x,y) {
        this.x = x;
        this.y = y;
    }

    add() {
        return this.x + this.y;
    }
}

let math = new Math(1,2);

console.log(typeof Math);  // "function" 

console.log(Math === Math.prototype.constructor); // true

//         ===        
console.log(math.__proto__ === Math.prototype); // true