사용자 지정 네임스페이스 및 WinJS.Namespace

사용자 지정 네임스페이스 및 WinJS.Namespace

[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]

Applies to Windows and Windows Phone

WinJS.Namespace.define 함수를 사용하면 코드를 구성하기 위한 하나의 방법으로 네임스페이스를 직접 만들 수 있습니다.

네임스페이스에서 형식이나 기타 요소를 만들면 정규화된 이름 Namespace.Type을 사용하여 네임스페이스 외부에서 이러한 항목을 참조할 수 있습니다.

네임스페이스를 정의하기 전에 요소를 정의해야 하며, 그 후에 네임스페이스 정의에서 이러한 요소에 참조를 추가하면 됩니다. 네임스페이스 정의 내에 요소를 정의하는 경우에는 this가 다른 항목을 참조할 때 this 키워드를 사용하여 네임스페이스의 다른 멤버를 참조할 수 있습니다.

일반적으로 네임스페이스 멤버를 정의하는 가장 효율적인 방법은 모듈 종결 내에서 멤버를 정의하는 것입니다. 이때 네임스페이스 요소를 먼저 정의한 다음 네임스페이스 정의에 추가합니다. 멤버는 네임스페이스 정의에 추가하기 전에 먼저 정의해야 합니다.


(function () {
     var Robot = WinJS.Class.define(function (name) {
            this.name = name;
        },
        { modelName: "" },
        { harmsHumans: false, obeysOrders: true }
    );

    WinJS.Namespace.define("Robotics", {
        Robot: Robot
    });
})();

다른 코드에서는 이러한 멤버를 다음과 같이 호출할 수 있습니다.


var myRobot = new Robotics.Robot("Sam");
var harm = Robotics.Robot.harmsHumans;

네임스페이스를 정의하기 전에 참조해서는 안 됩니다. 이렇게 하는 경우 아래 코드와 같이 "namespace name이(가) 정의되지 않았습니다." 오류가 발생합니다.




var Robot = WinJS.Class.define(function (name) {
         this.name = name;
    },
    { modelName: "" },
    { harmsHumans: false, obeysOrders: true }
 );

// Don't do this.
var myRobot = new Robotics.Robot("mike");

WinJS.Namespace.define("Robotics", {
    Robot: Robot 
});

필요한 경우 네임스페이스에 속성을 여러 번 추가할 수 있습니다. 나머지 네임스페이스 요소가 정의된 파일과는 다른 파일에 함수를 정의할 수도 있습니다. 또는 여러 네임스페이스에서 하나의 함수를 다시 사용할 수 있습니다. 다음 코드에서는 getAllRobots 함수 및 findRobot 함수를 Robotics 네임스페이스에 추가하기 위해 WinJS.Namespace.define이 두 번 호출됩니다.



var Robot =  WinJS.Class.define( function(name) {
        this.name = name;
});
        
function getAllRobots() {
    return allRobots;
}

var allRobots = [
    new Robot("mike"),
    new Robot("ellen")
];

WinJS.Namespace.define("Robotics", {
    Robot: Robot,
    getAllRobots: getAllRobots
});

function findRobot(robotName) {
    for (var i in allRobots) {
        if (allRobots[i].name == robotName) {
            return llRobots[i];
        }
    }
}

WinJS.Namespace.define("Robotics", {
    findRobot: findRobot
});


네임스페이스 중첩

"Robotics.Search"와 같은 점 표기법을 사용하여 개별 네임스페이스를 정의하면 중첩된 네임스페이스를 만들 수 있습니다. 중첩을 하면 코드가 아주 복잡해질 수 있으므로 코드에서 중첩을 많이 사용하는 것은 바람직하지 않습니다. 중첩된 네임스페이스의 예는 다음과 같습니다.



var Robot =  WinJS.Class.define( function(name) {
        this.name = name;
});

function findRobot(robotName) {
    for (var i in allRobots) {
        if (allRobots[i].name == robotName) {
            return allRobots[i];
        }
    }
}

var allRobots = [
    new Robot("mike"),
    new Robot("ellen")
];

function getAllRobots() {
    return allRobots;
}

WinJS.Namespace.define("Robotics", {
    Robot: Robot
});
    
WinJS.Namespace.define("Robotics.Search", {
    findRobot: findRobot
});

var robot = Robotics.Search.findRobot("mike");


 

 

표시:
© 2016 Microsoft