为什么无法从pos获取box

我在尝试制作简单游戏的同时,尝试使用命名空间和模块化模式来学习JavaSCript。

我已经制作了pointboxSquares(游戏)对象。

我构建了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');
};

最佳答案

该行发生错误:

var pos = box.getPos();


根据您的myNS.box定义,getPos不会返回函数,而是返回pos对象,例如{x:0,y:0}。

getPos: getPos()的返回值更改为getPos: getPos

// public memebers
return {
    getPos: getPos
};


之后,您可以调用pos.x和pos.y。

使用工作演示更新小提琴:http://jsfiddle.net/ybwyLdmj/1/

10-06 07:32