我相对较新的JavaScript,并且我观看了道格拉斯克罗克福德关于这个主题的两个教程视频。他建议以下列方式创建在JavaScript面向对象的设计,通过使用匿名函数和闭包:在javascript中为面向对象编程创建本地状态
function Class() {
var privateVar1,
privateVar2;
function privateMethod1() {
}
function privateMethod2() {
}
return {
var publicVar1,
publicVar2;
publicMethod1: function() {
}
publicMethod2: function() {
}
};
}
这里麻烦的是,当我提出一个新的类,如
var a = Class();
我当我尝试使用在类定义中返回的对象字面量中声明的公共方法时出现错误。更具体地说,我得到错误Class.publicMethod1不是函数。任何人都可以看到这里有什么问题?我必须在这里错过一些东西,当然道格拉斯克罗克福德不可能在这方面公然不正确。
编辑: 当我发布该代码片段并且犯了一些语法错误时,已是深夜。抱歉浪费你的时间。这是我遇到的实际代码片段。
return {
//public methods
getNextMoveValues: function(board, player) {
currentBoard = board;
if(isBoardValid()) {
var completeURL = assembleString(board, player);
return queryServer(completeURL);
} else {
console.err("board arg not valid in MoveGenerator::getNextMoveValues");
}
},
toString: function() {
var rtn = "currentPlayer: " + currentPlayer + "\t" + "currentBoard: " +
currentBoard + "\t" + "gameOption:" + gameOption + "\n";
return rtn;
}
};
当我运行代码,我得到的唯一错误是“moveGen.getNextMoveValues(STARTING_BOARD,真)是未定义”当我执行以下命令: 的console.log(moveGen.getNextMoveValues(STARTING_BOARD,真)。响应);
难道你不应该''a.publicMethod1()'而不是'Class.publicMethod1()'? (并且不要让偶然的偶像化,它不会让你看起来很聪明) – 2010-10-17 09:48:57
道格拉斯克罗克福德不是一些随机的人。是javascript的半神...或者类似的东西... – petraszd 2010-10-17 09:51:33
@petraszd:从未听说过他。 – 2010-10-17 09:52:09