未捕获的TypeError:对象#<object>的属性getPos不是函数</object>

时间:2014-11-17 18:37:41

标签: javascript namespaces closures

为什么我不能pos形成box

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

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

我构建3 box'es并将它们放入游戏对象(Squares)供以后使用,但是当我尝试访问pos时,我只得到&#34; Uncaught TypeError:Property getPos of object#不是函数&#34;。

首先我认为盒子的类型是错误的,也许我应该检查它(但我不知道它是否可能)。他们认为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 个答案:

答案 0 :(得分:1)

错误发生在这一行:

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/