Tags

, ,

Terinspirasi dari cakejs, ane membuat emulator sederhana untuk inheritace dan overriding di javascript.
Berikut kodenya

Kelas = function() {
    var c = function() {
        if (this.initialize) {
            this.initialize.apply(this, arguments);
        }
    }

    function Extend(dst, src) {
        for (var i in src) {
            try {
                dst[i] = src[i];
            } catch (e) {
            }
        }
        return dst;
    }

    c.prototype = Object.create(Kelas.prototype);
    for (var i = 0; i < arguments.length; i++) {
        var a = arguments[i];
        if (a.prototype) {
            c.prototype = new a();
        } else {
            Extend(c.prototype, a);
        }
    }
    c.prototype.constructor = c;
    Extend(c, c.prototype);
    return c;
}

Apa yang bisa dilakukan oleh fungsi sederhana ini? Berikut cara menggunakannya.

Rectangle = Kelas({
    initialize: function(x,y){
        this.x = x;
        this.y = y;
    },
    getArea: function(){
        return this.x * this.y;
    }
});

var rc = new Rectangle(4,5); // membuat objek Rectangle dengan

console.log(rc.getArea()); // hasil 20
console.log(rc instanceof Rectangle);
console.log(rc instanceof Kelas);

Dari class Rectangle kita bisa menurunkannya menjadi kelas lain

Square = Kelas(Rectangle,{
    initialize: function(s){
        Rectangle.initialize.call(this,s,s); 
    }
});

var sq = new Square(5);

console.log(sq.getArea()); // hasil 25
console.log(sq instanceof Rectangle);
console.log(sq instanceof Square);
console.log(sq instanceof Kelas);

Di sini yang kita ubah adalah constructor-nya. Dimana Square adalah Rectangle dengan panjang sisi sama.
Source code bisa diambil di sini Contoh penggunaan yang lebih serius ada di sini

Advertisements