【问题标题】:Uncaught TypeError: Property getPos of object #<Object> is not a function未捕获的类型错误:对象 #<Object> 的属性 getPos 不是函数
【发布时间】:2015-01-14 18:27:06
【问题描述】:

为什么我不能从box 获得pos

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

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

我构建了 3 个 box'es 并将它们放入游戏对象 (Squares) 以供以后使用,但是当我尝试访问 pos 时,我只得到“Uncaught TypeError: Property getPos of object # is not a function” .

首先我认为盒子的类型是错误的,也许我应该检查一下(但我什至不知道它是否可能)。他们我认为 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');
};

【问题讨论】:

    标签: javascript namespaces closures


    【解决方案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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 2014-06-20
      • 1970-01-01
      相关资源
      最近更新 更多