2014-11-17 2 views
0

pos 양식을 box으로 가져올 수없는 이유는 무엇입니까?잡히지 않은 TypeError : 객체 # <Object>의 속성 getPos가 함수가 아닙니다.

간단한 게임을 만들면서 JavaScript, 네임 스페이스 및 모듈 식 패턴을 배우려고합니다.

나는 point, boxSquares (게임) 개체를 만들었습니다.

나는 3 box'es을 빌드하고 나중에 사용할 수 있도록 게임 객체 (Squares)에 넣습니다. 그러나 pos에 액세스하려고하면 "Uncaught TypeError : 객체 #의 속성 getPos가 함수가 아닙니다."라는 메시지가 나타납니다.

처음에는 상자의 종류가 잘못되었다고 생각했는데 아마도 확인해야합니다 (하지만 가능하면 알 수는 없습니다). 그리고 그들은 JavaScript가 역동적 인 언어라고 생각했기 때문에 그것이 내성적이어서는 안됩니다. 분명히 혼란스럽고 좌초되었습니다. 내가 누락되었거나 이해하지 못한 것은 무엇인가?

코드 예제를 실행 : 또는 오류가이 라인에 무슨 일이 일어나고 JSFiddle.net

var myNS = myNS || {}; 

myNS.point = function (x, y) { 
    return { 
     x: x, 
     y: y 
    }; 
}; 

myNS.box = function (pos) { 
    // private members 
    getPos = function() { 
     return pos; 
    }; 

    // public memebers 
    return { 
     getPos: getPos() 
    }; 
}; 

myNS.Squares = function() { 
    // private members 
     var boxes, 

      getBoxes = function() { 
       return boxes; 
      } 

      setBoxes = function(newBoxes) { 
       boxes = newBoxes; 
      }; 

    // public memebers 
    return { 
     getBoxes: getBoxes, 
     setBoxes: setBoxes 
    }; 
}('canvasSquares'); 

$(window).load(function() { 
    $('body').append('Initialize.. <br/>'); 
    init(); 
    $('body').append('Initialize done. <br/> <br/>'); 

    useBoxesLater(); 
}); 

function init() { 
    var boxes = []; 

    for (var i = 0; i < 3; i++) { 
     var pos = myNS.point(10 * i, 10 * i); 
     var box = myNS.box(pos); 
     boxes.push(box); 
     $('body').append('box added: ' + pos.x + ', ' + pos.y + '<br/> '); 
    } 
    $('body').append('boxes: ' + boxes.length + '<br/>'); 

    myNS.Squares.setBoxes(boxes); 
}; 

function useBoxesLater(){ 
    var boxes = myNS.Squares.getBoxes(); 
    $('body').append('boxes in myNS.Squares: ' + boxes.length + '<br/>'); 
    for (var i = 0; i < boxes.length; i++) { 
     var box = boxes[i]; 
     $('body').append(i + '. box: ' + box + '<br/>'); 

     $('body').append('Find pos on box: <br/>'); 
     $('body').append('Calling box.getPos() result in Error: "Uncaught TypeError: Property getPos of object #<Object> is not a function"'); 
     var pos = box.getPos(); 

     $('body').append('<br/>'); 
    } 

    $('body').append('Don\'t get to here'); 
}; 

답변

1

를 참조하십시오 당신의 myNS.box 정의에 기반

var pos = box.getPos(); 

이 getPos 함수하지만 POS를 반환하지 않습니다 개체, 예 : {x : 0, y : 0}.

getPos: getPos()의 반품을 getPos: getPos으로 변경하십시오.

// public memebers 
return { 
    getPos: getPos 
}; 

그 후에는 pos.x와 pos.y를 호출 할 수 있습니다.

작업 데모로 바이올린 업데이트 : http://jsfiddle.net/ybwyLdmj/1/

관련 문제