function point(x, y) {
        if (!(this instanceof point))
            return new point(x, y);
        var xy;
        if (y === undefined && Object(x) !== x) {
            xy = x.split(_.indexOf(x, "@") === -1 ? " " : "@");
            this.x = parseInt(xy[0], 10);
            this.y = parseInt(xy[1], 10);
        } else if (Object(x) === x) {
            this.x = x.x;
            this.y = x.y;
        } else {
            this.x = x;
            this.y = y;
        }
    }
function point(x, y) {
        if (!(this instanceof point))
            return new point(x, y);
        var xy;
        if (y === undefined && Object(x) !== x) {
            xy = x.split(_.indexOf(x, "@") === -1 ? " " : "@");
            this.x = parseInt(xy[0], 10);
            this.y = parseInt(xy[1], 10);
        } else if (Object(x) === x) {
            this.x = x.x;
            this.y = x.y;
        } else {
            this.x = x;
            this.y = y;
        }
    }
function point ( x , y ) { if ( ! ( this instanceof point ) ) return new point ( x , y ) ; var xy ; if ( y === undefined && Object ( x ) !== x ) { xy = x . split ( _ . indexOf ( x , "@" ) === - 1 ? " " : "@" ) ; this . x = parseInt ( xy [ 0 ] , 10 ) ; this . y = parseInt ( xy [ 1 ] , 10 ) ; } else if ( Object ( x ) === x ) { this . x = x . x ; this . y = x . y ; } else { this . x = x ; this . y = y ; } }
* `point(10, 20)` * `new point(10, 20)` * `point('10 20')` * `point(point(10, 20))`
* point ( 10 20 ) * new point ( 10 20 ) * point ( 10 20 ) * point ( point ( 10 20 ))