如何提高对象方法的使用效率?

时间:2018-04-07 16:04:30

标签: javascript

我正在制作一款小游戏。游戏中有一个商店和一个包;你可以从商店购买物品并将它们放入你的包里。每个项目在游戏中都有自己的东西,并且有两种类型的项目:A)只能由onclick触发的项目和B)应该不断检查条件的项目,然后只运行一旦。我需要帮助为typeB项创建代码。

<body onload = "docReady()">
    <img src = "img1.png" onclick = "buy(item1TypeA)" />
    <img src = "img2.png" onclick = "buy(item2TypeA)" />
    <img src = "img3.png" onclick = "buy(item1TypeB)" />
    <img src = "img4.png" onclick = "buy(item2TypeB)" />
    // et cetera //
    <ul id = "bagContainer"> // LI items appended here // </ul>
</body>

function docReady() 
{
    item1 = { type:A, name:1, price:1000 };
    item2 = { type:A, name:2, price:2000 };
    item3 = { type:B, name:3, price:4000 };
    item4 = { type:B, name:4, price:16000 };
    // et cetera //
    money = 100000;
}

function buy(item)
{
    if (money >= item.price)
    {
        money -= item.price;
        if (sameItem == item1)
        {
            var listItem = document.createElement("li");
            listItem.textContent = sameItem.name;
            listItem.addEventListener('click', function() { //code1A// });
            document.getElementById("bagContainer").appendChild(listItem);
        }
        if (sameItem == item2)
        {
            var listItem = document.createElement("li");
            listItem.textContent = sameItem.name;
            listItem.addEventListener('click', function() { //code2A// });
            document.getElementById("bagContainer").appendChild(listItem);
        }
        // no idea how I could write the code for typeB items //
     }
}

typeB项目的代码应该不断检查条件。如果满足条件,则该项应运行其各自的功能。我的问题是试图不断检查;如果我使用whileif,那么一旦其功能完成,我将如何阻止代码不断检查?

我怎么能软编码呢?

1 个答案:

答案 0 :(得分:1)

您可以创建一个间隔,每隔x个数量(毫秒)检查一个条件,并在满足条件时使用removeInterval将其删除。要存储删除的时间间隔,可以使用箭头函数保持在同一范围内,以便在interval的时间间隔内为函数提供。

if (sameItem == item3) {
  var listItem = document.createElement("li");
  listItem.textContent = sameItem.name;
  const interval = window.setInterval(() => {
    if (condition) {
      //code
      window.removeInterval(interval);
    }
  }, 1000); //or whatever frequency
  document.getElementById("bagContainer").appendChild(listItem);
}