사용자 지정 유형 및 WinJS.Class

Applies to Windows and Windows Phone

WinJS.Class.defineWinJS.Class.derive 함수를 사용하여 JavaScript 형식을 정의하고 파생할 수 있습니다.

WinJS.Class.define으로 클래스 정의

WinJS.Class.define 함수는 JavaScript 형식을 정의하기 위한 도우미 함수입니다. 생성자 함수, 일련의 "인스턴스" 멤버(형식의 프로토타입에 정의됨) 및 일련의 "정적" 멤버(형식 자체에 정의됨)를 제공합니다.

개체의 프로토타입에 추가된 속성은 생성자 함수를 호출하여 인스턴스화되는 개체에 나타나지만 형식에 직접 추가된 함수는 형식 자체에만 속합니다. 예를 들어 다음 코드에서는 인스턴스 속성 name 및 정적 속성 harmsHumans를 갖는 Robot 형식을 정의하는 방법을 보여줍니다.

modelName 속성은 Robot(name) 생성자 함수로 만든 개별 개체에 속하지만 harmsHumans 속성은 모든 Robot 개체에 유효합니다.


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;

위 코드는 다음 "straight" JavaScript 코드와 직접적으로 일치합니다.


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

var myRobot = new Robot("Mickey")

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

WinJS.Class.define에서는 속성 정의를 위한 유용한 바로 가기를 제공합니다. JavaScript에서는 속성 설명자를 사용하여 속성의 동작을 사용자 지정할 수 있습니다. WinJS.Class.define은 지정된 개체를 속성 설명자로 취급합니다. 예를 들어 modelName에 계산된 값을 사용하려는 경우 JavaScript용 Windows 라이브러리가 없는 JavaScript에서는 다음 코드가 필요합니다.


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

WinJS.Class.define을 사용할 경우 다음과 같이 코드를 작성할 수 있습니다.


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

WinJS.Class.derive로 클래스 파생

WinJS.Class.derive 함수는 다른 형식에서 형식을 파생하는 데 사용할 수 있는 도우미 함수입니다. 이 함수는 기본 형식의 프로토타입을 통해 Object.create를 호출하여 파생된 형식을 생성하는 점을 제외하고 WinJS.Class.define과 비슷하게 동작합니다. Object.create 메서드를 사용하여, 부모 개체의 프로토타입과 자식 개체에 추가된 모든 속성을 사용하여 다른 형식에서 형식을 파생시킬 수 있습니다. 첫 번째 매개 변수가 null인 경우 WinJS.Class.deriveObject.create 둘 다 기본 형식(다른 개체에서 파생되지 않는 형식)을 만듭니다.

다음 코드에서는 Robot 형식에서 SpaceRobot 형식을 파생하는 방법을 보여줍니다. WinJS.Class.define과 동일한 방법으로 "static" 및 "instance" 멤버를 추가합니다.

다음 코드에서 SpaceRobot 클래스는 Robot 클래스에서 파생됩니다. 이 클래스는 Robot 클래스의 모든 속성과 "instance" 속성 airSupply 및 "static" 속성 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;


 

 

표시:
© 2015 Microsoft