*****
class CoolGuy {
    specialTrick = nothing
    CoolGuy( trick ) {
        specialTrick = trick
    }
    showOff() {
        output( "Oto moja sztuczka: ", specialTrick )
    }
}
*****
Janek = new CoolGuy( "skakanka" )

Janek.showOff() // Oto moja sztuczka: skakanka
*****
class Vehicle {
    engines = 1

    ignition() {
        output( "Wczenie silnika." );
    }

    drive() {
        ignition();
        output( "Sterowanie i poruszanie si do przodu!" )
    }
}

class Car inherits Vehicle {
    wheels = 4

    drive() {
        inherited:drive()
        output( "Toczenie si na wszystkich ", wheels, " koach!" )
    }
}

class SpeedBoat inherits Vehicle {
    engines = 2

    ignition() {
        output( "Wczenie ", engines, " silnikw." )
    }

    pilot() {
        inherited:drive()
        output( "Poruszanie si z atwoci po wodzie!" )
    }
}
*****
// Niezwykle uproszczony przykad domieszki mixin(..):
function mixin( sourceObj, targetObj ) {
    for (var key in sourceObj) {
        // Kopiowanie klucza tylko wtedy, gdy nie istnieje w obiekcie docelowym.
        if (!(key in targetObj)) {
            targetObj[key] = sourceObj[key];
        }
    }

    return targetObj;
}

var Vehicle = {
    engines: 1,

    ignition: function() {
        console.log( "Wczenie silnika." );
    },

    drive: function() {
        this.ignition();
        console.log( "Sterowanie i poruszanie si do przodu!" );
    }
};

var Car = mixin( Vehicle, {
    wheels: 4,

    drive: function() {
        Vehicle.drive.call( this );
        console.log(
           "Toczenie si na wszystkich " + this.wheels + " koach!"
        );
    }
} );
*****
// Niezwykle uproszczony przykad domieszki mixin(..):
function mixin( sourceObj, targetObj ) {
    for (var key in sourceObj) {
        // Kopiowanie klucza tylko wtedy, gdy nie istnieje w obiekcie docelowym.
        if (!(key in targetObj)) {
            targetObj[key] = sourceObj[key];
        }
    }

    return targetObj;
}
*****
// Alternatywna wersja funkcji, mniej bezpieczna pod wzgldem nadpisywania waciwoci.
function mixin( sourceObj, targetObj ) {
    for (var key in sourceObj) {
        targetObj[key] = sourceObj[key];
    }

    return targetObj;

}

var Vehicle = {
    // ...
};

// Zaczynamy od utworzenia pustego obiektu
// wraz ze skopiowanymi elementami obiektu Vehicle.
var Car = mixin( Vehicle, { } );

// Teraz do obiektu Car kopiujemy niezbdn zawarto.
mixin( {
    wheels: 4,

    drive: function() {
        // ...
    }
}, Car );
*****
// Tradycyjna klasa JavaScript o nazwie Vehicle.
function Vehicle() {
    this.engines = 1;
}
Vehicle.prototype.ignition = function() {
    console.log( "Wczenie silnika." );
};
Vehicle.prototype.drive = function() {
    this.ignition();
    console.log( "Sterowanie i poruszanie si do przodu!" );
};

// Klasa pasoytnicza o nazwie Car.
function Car() {
    // Przede wszystkim 'car' to egzemplarz 'Vehicle'.
    var car = new Vehicle();

    // Teraz modyfikujemy obiekt 'car', aby nada mu dane cechy charakterystyczne.
    car.wheels = 4;

    // Zachowanie uprzywilejowanego odwoania do Vehicle::drive().
    var vehDrive = car.drive;

    // Nadpisanie Vehicle::drive().
    car.drive = function() {
        vehDrive.call( this );
        console.log(
           "Toczenie si na wszystkich " + this.wheels + " koach!"
        );

    return car;
}

var myCar = new Car();

myCar.drive();
// Wczenie silnika.
// Sterowanie i poruszanie si do przodu!
// Toczenie si na wszystkich 4 koach!
*****
var Something = {
    cool: function() {
        this.greeting = "Witaj, wiecie!";
        this.count = this.count ? this.count + 1 : 1;
    }
};

Something.cool();
Something.greeting; // "Witaj, wiecie!"
Something.count; // 1

var Another = {
    cool: function() {
        // Niejawna domieszka powodujca zmieszanie 'Something' z 'Another'.
        Something.cool.call( this );
    }
};

Another.cool();
Another.greeting; // "Witaj, wiecie!"
Another.count; // 1 (stan nie jest wspdzielony z 'Something').
*****

??





86	(	Rozdzia 4. Bd! W dokumencie nie ma tekstu o podanym stylu.

			Bd! W dokumencie nie ma tekstu o podanym stylu.	(	89



					85

