为什么我不能pos
形成box
?
我正在尝试学习JavaSCript,使用命名空间和模块化模式,同时制作一个简单的游戏。
我制作了point
,box
和Squares
(游戏)对象。
我构建3 box'es
并将它们放入游戏对象(Squares
)供以后使用,但是当我尝试访问pos时,我只得到" Uncaught TypeError:Property getPos of object#不是函数"。
首先我认为盒子的类型是错误的,也许我应该检查它(但我不知道它是否可能)。他们认为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');
};
答案 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/