Definieren und Ableiten von Typen mithilfe von WinJS.Class (HTML)

Applies to Windows and Windows Phone

Mithilfe der Funktionen WinJS.Class.define und WinJS.Class.derive können Sie JavaScript-Typen definieren und ableiten.

Definieren von Klassen mit "WinJS.Class.define"

Bei der WinJS.Class.define-Funktion handelt es sich um eine Hilfsfunktion zum Definieren eines JavaScript-Typs. Sie stellen eine Konstruktorfunktion, mehrere "Instanzmember" (die für den Prototyp des Typs definiert wurden) sowie mehrere "statische Member" (die für den Typ selbst definiert werden) bereit.

Die dem Prototyp eines Objekts hinzugefügten Eigenschaften werden für alle Objekte angezeigt, die durch Aufrufen der zugehörigen Konstruktorfunktion instanziiert werden. Die dem Typ direkt hinzugefügten Eigenschaften gehören jedoch nur zum Typ selbst. Der folgende Code zeigt beispielsweise, wie ein Robot-Typ definiert wird, der die Instanzeigenschaft name und die statische Eigenschaft harmsHumans aufweist.

Die modelName-Eigenschaft gehört zu den einzelnen mit der Konstruktorfunktion Robot(name) erstellten Objekten. Die harmsHumans-Eigenschaft gilt jedoch für alle Robot-Objekte.


var Robot = WinJS.Class.define(
    // The constructor function.
    function(name) {
        this.name = name;
    }, 
    // The set of instance members.
    { modelName: "" }, 
    // The set of static members.
    { harmsHumans: false });

var myRobot = new Robot("Mickey");

myRobot.modelName = "4500";
Robot.harmsHumans = false;

Der oben dargestellte Code entspricht dem folgenden "einfachen" JavaScript-Code:


function Robot(name) {
    this.name = name;
    this.modelName = "";
}

var myRobot = new Robot("Mickey")

myRobot.modelName = '4500';
Robot.harmsHumans = false;

WinJS.Class.define stellt hilfreiche Verknüpfungen für die Definition von Eigenschaften bereit. In JavaScript können Sie das Verhalten von Eigenschaften mithilfe eines Eigenschaftendesktriptors anpassen. WinJS.Class.define behandelt ein angegebenes Objekt als Eigenschaftendesktriptor. Wenn Sie z. B. für modelName einen berechneten Wert verwenden möchten, müssen Sie in JavaScript ohne Windows-Bibliothek für JavaScript folgenden Code verwenden:


Object.defineProperty(Robot.prototype, "modelName", {
    get: function () { this.computeModelName(); }
});

Wenn Sie WinJS.Class.define verwenden, können Sie Code wie den folgenden verwenden.


var Robot = WinJS.Class.define(
    function (name) { this.name = name; },
    {
        modelName: { get: function () { return this.computeModelName(); } }
    }
);

Ableiten von Klassen mit "WinJS.Class.derive"

Bei der WinJS.Class.derive-Funktion handelt es sich um eine Hilfsfunktion, die Sie zum Ableiten eines Typs von einem anderen verwenden können. Sie verhält sich wie WinJS.Class.define, jedoch mit der Ausnahme, dass sie den Prototyp des Basistyps verwendet, um den abgeleiteten Typ durch Aufrufen von Object.create zu erstellen. Mit der Object.create-Methode können Sie Typen mithilfe des Prototyps des übergeordneten Objekts und aller zum untergeordneten Objekt hinzugefügten Eigenschaften voneinander ableiten. Sowohl mit WinJS.Class.derive als auch mit Object.create wird ein Basistyp (nicht von einem anderen Objekt abgeleitet) erstellt, wenn der erste Parameter null lautet.

Der folgende Code zeigt, wie ein SpaceRobot-Typ vom Robot-Typ abgeleitet wird. static- und instance-Elemente werden auf die gleiche Weise wie mit WinJS.Class.define hinzugefügt.

Im folgenden Code wird die SpaceRobot-Klasse von der Robot-Klasse abgeleitet. Sie besitzt alle Eigenschaften der Robot-Klasse und zusätzlich die instance-Eigenschaft airSupply und die static-Eigenschaft safeSelf.


var SpaceRobot = WinJS.Class.derive(Robot, 
    // The constructor function.
    function (name) {
        this.name = name;
    },
    // The set of instance members.
    { airSupply: "" },
    // The set of static members.
    { saveSelf: true });

var mySpaceRobot = new SpaceRobot("Myra");
mySpaceRobot.airSupply = "oxygen";
var save = SpaceRobot.saveSelf;


 

 

Anzeigen:
© 2014 Microsoft