Classes / Properties

class Square {
    constructor() {
        this.side = 0;
    }

    get area() {
        return this.side * this.side;
    }

    set area(value) {
        this.side = Math.sqrt(value);
    }
}

let square = new Square();
square.side = 2;
//square.area is 4
console.log("square.area is"
    square.area);

square.area = 9;
//square.side is 3
console.log("square.side is"
    square.side);


// *** up to ES6 ***
function OldSquare() {
    this.side = 0;
}

Object.defineProperty(OldSquare.prototype"area", {
        getfunction () {
            return this.side * this.side;
        },
        setfunction (value) {
            this.side = Math.sqrt(value);
        }
});

var oldSquare = new OldSquare();
oldSquare.side = 2;
//oldSquare.area is 4
oldSquare.area = 16;
//oldSquare.side is 4
console.log(oldSquare.side + ", " + oldSquare.area);