我对 javascript 比较陌生,并且观看了 Douglas Crockford 关于该主题的两个教程视频。他建议通过使用无名函数和闭包,通过以下方式在 JavaScript 中创建面向对象的设计:
function Class() {
var privateVar1,
privateVar2;
function privateMethod1() {
}
function privateMethod2() {
}
return {
var publicVar1,
publicVar2;
publicMethod1: function () {
}
publicMethod2: function() {
}
};
}
这里的麻烦是当我创建一个新类时,例如
var a = Class();
当我尝试使用我在类定义中返回的对象文字中声明的公共(public)方法时,出现错误。更具体地说,我收到错误 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, true) 未定义”: console.log(moveGen.getNextMoveValues(STARTING_BOARD, true).response);
最佳答案
您的语法无效:
return {
var publicVar1,
publicVar2;
publicMethod1: function () {
}
publicMethod2: function() {
}
};
应该是
return {
publicVar1,
publicVar2,
publicMethod1: function () {},
publicMethod2: function() {}
};
您在这里使用对象文字,其形式始终为:
{member: value, member: value}
其中value
也可以省略:{member, member: value}
了解更多关于object initializers的信息.
关于javascript - 在 JavaScript 中创建面向对象编程的本地状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3952695/