在JavaScript类中调用嵌套函数

在JavaScript类中调用嵌套函数,javascript,jquery,function,class,Javascript,Jquery,Function,Class,我有一个名为“Game”的类,其中有一个名为“inventory”的属性,该属性调用“inventory(id)”函数,在该函数中创建并存放所有库存函数以清除混乱 我已经创建了一个新对象 var Game = new Game(body, mainElement, inventoryItems, statusElement); (它应该是自我解释的,主体正在选择主体标记,主体元素是我的主要区域,状态元素是状态元素,当然,inventoryItems是我用来将项目附加到其中的)-您可以查看代码笔

我有一个名为“Game”的类,其中有一个名为“inventory”的属性,该属性调用“inventory(id)”函数,在该函数中创建并存放所有库存函数以清除混乱

我已经创建了一个新对象

var Game = new Game(body, mainElement, inventoryItems, statusElement);
(它应该是自我解释的,主体正在选择主体标记,主体元素是我的主要区域,状态元素是状态元素,当然,inventoryItems是我用来将项目附加到其中的
    )-您可以查看代码笔以获得更好的理解

    你需要帮助我的主要代码

    function Game(body, mainElement, inventoryItems, statusElement) {
      this.body = body;
      this.main = mainElement;
      this.inventory = Inventory(inventoryItems);
      this.status = statusElement;
    }
    
    function Inventory(y) {
      this.element = y;
      this.create = function(itemName, equippable, sellable) {
        this.element.append(function(){
          var item = '';
    
          if (itemName.length > 0) {
            item += "<li>" + itemName;
    
            if (sellable) {
              item += "<label>Sell<input type='checkbox' name='sell' onclick='javacript: confirmSell(this);' /></label>";
            }
    
            if (equippable) {
              item += "<label>Equip<input type='checkbox' name='equip' onclick='javacript: equip(this);' /></label>";
            }
          } 
          return item;
        }, this.element);
    
      }
    }
    
    var Game = new Game(body, mainElement, inventoryItems, statusElement);
    Game.inventory(create("Bronze Knife", true, true));
    Game.inventory(create("Ramen Noodles", false, true));
    Game.inventory(create("Boots w/da Fur", true, true));
    
    功能游戏(body、main元素、inventoryItems、statusElement){
    这个身体=身体;
    this.main=main元素;
    this.inventory=库存(库存项目);
    this.status=statusElement;
    }
    功能清单(y){
    该元素=y;
    this.create=函数(itemName、Equipable、Selable){
    this.element.append(函数(){
    var项目=“”;
    如果(itemName.length>0){
    项目+=“
  • ”+项目名称; 如果(可销售){ 物品+=“出售”; } if(可配备){ 物品+=“装备”; } } 退货项目; },这个元素); } } var游戏=新游戏(主体、主元素、库存项目、状态元素); 清单(创建(“青铜刀”,真,真)); 清单(创建(“拉面”,假,真)); 游戏目录(创建(“带毛皮的靴子”,真,真));
  • 现在,当我尝试调用清单(create(string,bool,bool))时,会出现一些有趣的错误

    它创建了第一个项目,所以至少我知道“某些东西”在“某种程度上”是正确的,否则我可能完全错了,应该关闭我的计算机

    在chrome中,我被告知青铜刀库存。create告诉我未定义不是一个函数

    非常感谢您的帮助


    编辑:

    Game
    是一个函数,您正在定义一个名为
    Game
    的变量


    尝试重命名
    var Game=newgame(…)
    var游戏=新游戏(…)

    Game
    是一个函数,您正在定义一个名为
    Game
    的变量


    尝试重命名
    var Game=newgame(…)
    var游戏=新游戏(…)

    游戏。库存
    是对象(参考
    库存
    对象(在
    库存
    之前添加
    新的
    ),其中包含方法
    创建
    ,因此您可以这样调用此方法

      .....
      this.inventory = new Inventory(inventoryItems);
      .....
    
      var Game = new Game(body, mainElement, inventoryItems, statusElement);
    
      Game.inventory.create("Bronze Knife", true, true);
      Game.inventory.create("Ramen Noodles", false, true);
      Game.inventory.create("Boots w/da Fur", true, true);
    

    演示:

    游戏。inventory
    是对象(参考
    inventory
    对象(在
    inventory
    之前添加
    new
    ),其中包含方法
    create
    ,因此您可以这样调用此方法

      .....
      this.inventory = new Inventory(inventoryItems);
      .....
    
      var Game = new Game(body, mainElement, inventoryItems, statusElement);
    
      Game.inventory.create("Bronze Knife", true, true);
      Game.inventory.create("Ramen Noodles", false, true);
      Game.inventory.create("Boots w/da Fur", true, true);
    

    演示:

    创建库存时使用
    new
    。使用点表示法访问inventory的方法,因为它们是inventory对象的属性

    // Relevant changes shown:
    
    function Game(body, mainElement, inventoryItems, statusElement) {
      this.inventory = new Inventory(inventoryItems);
    }
    
    Game.inventory.create("Bronze Knife", true, true);
    
    将来,您可能希望尝试通过类似linter的脚本运行代码。只需关闭“凌乱的空白”选项或将
    /*jslint-white:true*/
    添加到文件顶部,它就可以为您提供有用的反馈,帮助您自己解决这个问题


    我通过JSLint运行了您的代码,我注意到的第一件事是“‘库存’在定义之前就已经被使用了。”所以我将库存移到了游戏上方。我再次运行JSLint,它报告“缺少‘new’”。最后,我向下查看报告,发现“‘create’在定义之前就已经被使用了。”。这两个数据点本可以提示您正确的方向。

    在创建库存时使用
    new
    。使用点表示法访问inventory的方法,因为它们是inventory对象的属性

    // Relevant changes shown:
    
    function Game(body, mainElement, inventoryItems, statusElement) {
      this.inventory = new Inventory(inventoryItems);
    }
    
    Game.inventory.create("Bronze Knife", true, true);
    
    将来,您可能希望尝试通过类似linter的脚本运行代码。只需关闭“凌乱的空白”选项或将
    /*jslint-white:true*/
    添加到文件顶部,它就可以为您提供有用的反馈,帮助您自己解决这个问题


    我通过JSLint运行了您的代码,我注意到的第一件事是“‘库存’在定义之前就已经被使用了。”所以我将库存移到了游戏上方。我再次运行JSLint,它报告“缺少‘new’”。最后,我向下查看报告,发现“‘create’在定义之前就已经被使用了。”。这两点数据可能已经向正确的方向暗示了您。

    您需要使用
    新库存(…)
    。请注意,您不应该用实例覆盖
    游戏
    构造函数。使用
    var game=new game(…)
    您需要使用
    new Inventory(…)
    。请注意,您不应该用实例覆盖
    game
    构造函数。使用
    var game=新游戏(…)