无法访问其他功能内的功能

时间:2020-05-23 10:30:40

标签: javascript

这是我的清单清单()函数的调用方式,我无法更改它。

 if (operationInfo[0] === 'add') {
            inventoryList().add(operationInfo[1]);

但是我的清单清单函数内部有一个方法,如下所示,但它指出obj.add不是函数!为什么?

function inventoryList(){

    const add = (name) => {
        // adds string to inv and if item exists doesn't add. Adds to log also as objects maintain no position
        if(!(name in inv)){
            inv[name] = name;
            entries.push(name)
        }
      };
}

2 个答案:

答案 0 :(得分:2)

要使用add函数,请从inventoryList函数返回。

function inventoryList() {
   const add = (name) => {
      if (!(name in inv)) {
         inv[name] = name;
         entries.push(name)
      }
   };

   return { add };
}

考虑到这一点,建议您将inventoryList更改为以add作为方法的类。

class InventoryList {
   add(name) {
      if (!(name in inv)) {
         inv[name] = name;
         entries.push(name)
      } 
   }
}

您可以像这样使用它

const invList = new InventoryList();

if (operationInfo[0] === 'add') {
   invList.add(operationInfo[1]);
}

答案 1 :(得分:0)

inventoryList未返回任何内容。返回一个对象,该对象包含对要执行的函数的引用。另外,_addinventoryList专有的内部函数,因此必须公开它才能使用

function execute() {
  inventoryList().add('hello')
}

function inventoryList() {
  const _add = (name) => {
    console.log(name)
    // rest of code
  };
  return {
    add: _add,
    // add other function if it is there
  }
}
<button onclick='execute()'>Execute</button>