【发布时间】:2010-10-17 09:36:05
【问题描述】:
我对 javascript 比较陌生,我看过 Douglas Crockford 的两个关于这个主题的教程视频。他建议通过使用无名函数和闭包,以下列方式在 javascript 中创建面向对象的设计:
function Class() {
var privateVar1,
privateVar2;
function privateMethod1() {
}
function privateMethod2() {
}
return {
var publicVar1,
publicVar2;
publicMethod1: function () {
}
publicMethod2: function() {
}
};
}
这里的麻烦是当我创建一个新类时,例如
var a = Class();
当我尝试使用在类定义中返回的对象字面量中声明的公共方法时出现错误。更具体地说,我收到错误 Class.publicMethod1 不是函数。谁能看到这里有什么问题?我肯定在这里遗漏了一些东西,当然,道格拉斯·克罗克福德在这件事上不可能如此公然不正确。
编辑: 当我发布代码 sn-p 时已是深夜,我犯了一些语法错误。很抱歉浪费了您的时间。这是我遇到问题的实际代码的 sn-p。
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, true).response);
【问题讨论】:
-
您不应该使用
a.publicMethod1()而不是Class.publicMethod1()吗? (别再崇拜某个随便的人了,这不会让你看起来很聪明) -
道格拉斯·克罗克福德不是随便的人。是 javascript 的半神……或者类似的东西……
-
@petraszd:没听说过他。
-
@Matti Virkkunen:并不意味着他不重要或不知名:en.wikipedia.org/wiki/Douglas_Crockford
-
@Matti Virkkunen:但知道也无妨。将功劳归功于应得的人是一件好事。无论如何......没关系。
标签: javascript oop object