Я относительно новичок в 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, true) is undefined» при выполнении следующей команды: console.log (moveGen.getNextMoveValues (STARTING_BOARD,правда) .response);