javascript - 在 JavaScript 中创建面向对象编程的本地状态

标签 javascript oop object

我对 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/

相关文章:

javascript - OOP - 访问对象以更改其变量?

php - 创建两个相互使用的类?

C++ 设计模式 : multiple ways to load file

javascript - JS : how to merge arrays with objects without duplicates

ios - 如何使用swift 4.1获取url参数的值

javascript - JS - 属性替换

javascript - Chrome JavaScript 调试器中的 "Just My Code"

javascript - 使用 Bootstrap 按钮组复选框绑定(bind)选中的正确方法是什么?

javascript - 如何使用 JavaScript 获取包含哈希片段的先前 url?

c++ - 不匹配运算符 <<(操作数类型 std::ostream)c++ OOP 和 Point