【问题标题】:Add private method in JavaScript?在 JavaScript 中添加私有方法?
【发布时间】:2015-10-15 12:41:48
【问题描述】:

我正在尝试制作一个基本游戏来增强我的 JavaScript 知识。但是我需要一些帮助来尝试向对象添加私有方法。这样做的原因是我希望用户在达到特定条件后能够访问某些动作,但不是在此之前。我也不想每次角色升级时都添加方法。这是一些代码:

function Character(name, type, sex) {
    this.name = name;
    this.type = type;
    this.sex = sex;
    //Ignore this part as well this.punch = function() {
        //Ignore this. Will work on later
    }
};

var rock = new Character('Stoner', 'Rock', 'Male');

【问题讨论】:

  • 不管命令的可见性如何,UI 应该提供对此类功能的访问(或不提供),除非您希望人们自己重写 js 代码...
  • 哦,我忘了补充,不会有任何图形用户界面,因为这将非常简单(刚刚完成了 codecademy 中的 JS 课程)
  • 好吧,在构造函数中你可以这样做:Object.defineProperty(this, "punch", {get:function(){return this.type=='master' ? punch : Boolean }});,如果条件尚未满足,则使用私有打孔函数或布尔值。

标签: javascript methods private


【解决方案1】:

我认为这不是 OP 正在寻找的东西......似乎 OP 希望它们“私有”,直到用户达到某个级别然后公开

假设这条评论是正确的......

它不需要是私有方法,它是一个公共方法,然后使用 if/else 语句来处理如果它们没有足够的“级别”。

function Character(name, type, sex) {
  this.name = name;
  this.type = type;
  this.sex = sex;

  this.level = 10;

  this.punch = (function(){
    if (this.level > 5) {
      /* Punch functionality goes here. */
    } else {
      /* They don't have enough levels, tell them that! */
    }
  }).bind(this)
}

我只是假设您正在使用关卡。如果你有其他系统,你可以简单地调整它。

【讨论】:

    【解决方案2】:

    如果你使用“var”而不是 this.punch,它将变成私有的。

     function Character(name, type, sex) {
            this.name = name;
            this.type = type;
            this.sex = sex;
            var punch = function() {
                //Ignore this. Will work on later
            }
    
        };
    
        var rock = new Character('Stoner', 'Rock', 'Male');
    

    【讨论】:

    • 我不认为这就是 OP 正在寻找的东西......似乎 OP 希望它们“私有”,直到用户达到某个级别然后公开。
    • 是的,打孔方法是公开的
    • 在这种情况下,我们可以提供一个公共方法,其工作是检查级别并相应地返回私有方法袋。只是一个建议。
    【解决方案3】:

    这是一个完全的猜测,但这是我的看法,基于它看起来你想要的。我暂时想不出别的办法。

    function Character(name, type, sex) {
        var level = 1;
        this.name = name;
        this.type = type;
        this.sex = sex;
        this.punch = function() {
            // If the user isn't over level 5, don't punch anything
            if (level < 5) {
                return;
            }
            // Punch something
        }
    }
    

    显然你需要一些方法来升级角色...

    【讨论】:

      猜你喜欢
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 2011-10-01
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      相关资源
      最近更新 更多