我相對較新的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