为什么无法从pos
获取box
?
我在尝试制作简单游戏的同时,尝试使用命名空间和模块化模式来学习JavaSCript。
我已经制作了point
,box
和Squares
(游戏)对象。
我构建了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/