Rectangle Constructor

This is an experiment in making a more succinct access to getter methods. Check out the definition of `Rectangle.prototype.area()`.

by Kaleb Hornsby

HTML

<script>
    var rectangle = [new Rectangle(3, 5), new Rectangle(4, 2)];
    function write(n){
    document.write("<div><em>A</em><sub>Rect<sub>" +
    n + "</sub></sub> = " +
    rectangle[n].area() +
    "</div>");
    }
    write(0);
    write(1);
</script>

JavaScript

if (!this.Rectangle) this.Rectangle = (function() {

    function Rectangle(height, width) {

        /**
         * PRIVATE METHODS
         **/

        function getHeight() {
            return height;
        }

        function getWidth() {
            return width;
        }

        /**
         * PRIVELEGED METHODS
         **/

        this.getHeight = getHeight;
        this.height = function(n) {
            return n === undefined ? this.getHeight() : this.setHeight(n);
        };
        this.height.valueOf = getHeight;
        this.height.toString = getHeight;
        this.setHeight = function(n) {
            height = n > 0 ? n : 0;
        };

        this.getWidth = getWidth;
        this.width = function(n) {
            return n === undefined ? this.getWidth() : this.setWidth(n);
        };
        this.width.valueOf = getWidth;
        this.width.toString = getWidth;
        this.setWidth = function(n) {
            width = n > 0 ? n : 0;
        };

        /**
         * PROCEDURAL STUFF
         **/

        this.setHeight(height);
        this.setWidth(width);
    }
    Rectangle.prototype.area = function() {
        return this.height * this.width;
    };
    return Rectangle;
})();