【发布时间】:2015-01-14 18:27:06
【问题描述】:
为什么我不能从box 获得pos?
我正在尝试学习 JavaSCript、使用命名空间和模块化模式,同时制作一个简单的游戏。
我制作了point、box 和Squares(游戏)对象。
我构建了 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