Javascript 如何访问生命之外的函数

Javascript 如何访问生命之外的函数,javascript,web,Javascript,Web,我有一个关于生活的任务我阅读了文档,在这里尝试过,但仍然找不到问题的答案

我有一个关于生活的任务
我阅读了文档,在这里尝试过,但仍然找不到问题的答案<我有两个文件。许多函数将被写入IIFE中名为items.js的文件中,我应该能够在另一个文件(比如main.js)中访问这些函数。
我试图实现它,但实际上无法实现。如有任何意见,我们将不胜感激。
谢谢。 实际上,我所需要的是,我在IIFE中的items.js中有一个名为TimeForNewToDoItem(item)的函数,
我应该能够在另一个.js文件中访问它。
我不需要存储该函数的任何返回值
TimeForNewToDoItem(item)函数只是执行一些DOM操作

//main.js
(功能(){
var toDoElements={};
var ulContainer=document.querySelector(“#itemContainerId”);
var div=document.createElement(“div”);
var listary=[];
document.addEventListener(“DOMContentLoaded”),函数(事件){
log(“加载DOM”);
//添加现有元素
var preload editems=[“吃”、“睡”];
PRELODEDITEMS.map(功能(项目)
{
listArray=TimeForNewToDoItem(项目);
div.appendChild(listArray);
});	
/*var newInputItem=document.getElementById(“newToDoItem”);
var ulement=document.getElementById(“itemContainerId”);
var clrsc=document.getElementById(“clearScreen”);
添加监听器(“单击”,分配监听器);
clrsc.addEventListener(“单击”,清除屏幕);
newInputItem.addEventListener(“键控”,检查)*/
});
//检查回车键
功能检查(事件){
log(“Keydown事件监听”);
如果(event.keyCode===13){
log(“按下回车键,将添加新项目”);
var newItem=document.getElementById(“newToDoItem”).value;
TimeForNewToDoItem(newItem);
}
}
})();
//items.js
(功能(){
//添加新待办事项的步骤
函数TimeForNewToDoItem(newItem){
var newInputItem=document.getElementById(“newToDoItem”);
newInputItem.value=null;
var childCount=ulContainer.childNodes.length;
log(“当前在父ul元素中存在全部”+childCount+“子节点”);
var checkBoxid=“checkBox”+儿童计数;
var stat=“未检查”;
var divContent=模板(newItem,childCount);
console.log(“新增待办事项”);
var insertedItems={id:checkBoxid,名称:newItem,状态:stat};
存储元素(插入项);
返回内容;
}
//返回要添加到DOM的元素数组
函数模板(newItem、childCount){
var checkBoxid=“checkBox”+儿童计数;
var newItemToBeAdded=[];
var计数=0;
NewItemToBedded[count++]=“”;
NewItemToBedded[count++]=“”;
newItemToBeAdded[count++]=“”+newItem+“”;
NewItemToBedded[count++]=“”;
newItemToBeAdded=newItemToBeAdded.join(“”);
返回newItemToBeAdded;

})();
您可以将
IIFE
分配给某些变量。还可以返回一个对象,其中包含对
items.js中函数的引用

// main.js
// Assinged to a variable
var main = (function(){
    // rest of code 
    function check(event){
        console.log("Keydown event listened");
        if(event.keyCode === 13){
            // rest of code
            // Use by calling the variable name followed by the inner function
            items.Time_Item(newItem);
        }
    }
})();
items.js
中的IIFE分配给变量。此IIFE返回一个对象

//items.js
var items = (function() {
    //to add new todo item
    function TimeForNewToDoItem(newItem) {
        // rest of code
        return divContent;
    }

    //returns the array of elements to be added to the DOM
    function template(newItem, childCount) {
        // Rest of code
        return newItemToBeAdded;
    }
    return {
        Time_Item:TimeForNewToDoItem,
        template_item:template
    }
})();

另请注意,名称为大写的函数表示构造函数函数。您可以检查js函数命名约定以获得更好的指导。

您可以将
iLife
分配给某些变量。还可以返回一个对象,其中包含对
items.js中函数的引用

// main.js
// Assinged to a variable
var main = (function(){
    // rest of code 
    function check(event){
        console.log("Keydown event listened");
        if(event.keyCode === 13){
            // rest of code
            // Use by calling the variable name followed by the inner function
            items.Time_Item(newItem);
        }
    }
})();
items.js
中的IIFE分配给变量。此IIFE返回一个对象

//items.js
var items = (function() {
    //to add new todo item
    function TimeForNewToDoItem(newItem) {
        // rest of code
        return divContent;
    }

    //returns the array of elements to be added to the DOM
    function template(newItem, childCount) {
        // Rest of code
        return newItemToBeAdded;
    }
    return {
        Time_Item:TimeForNewToDoItem,
        template_item:template
    }
})();

另请注意,名称为大写的函数表示构造函数。您可以查看js函数命名约定以获得更好的指导。

我试图修改您的文件,但缺少一些内容。 但您所要求的可以通过创建一个变量或对象来完成,该变量或对象从iLife推送到window,然后在其他iffe中访问它。

//item.js
(function(){
  //to add new todo item
  window.MyNamespace = {
    TimeForNewToDoItem: function(newItem) {
      var newInputItem = document.getElementById("newToDoItem");
      newInputItem.value = null;
      var childCount = ulContainer.childNodes.length;
      console.log("totally "+childCount+" child nodes are currently present inside parent ul element");
      var checkBoxid = "checkBox"+childCount;
      var stat = "unchecked";
      var divContent = template(newItem,childCount);
      console.log("new TODO item added");
      var insertedItems = {id : checkBoxid, name : newItem, state : stat};
      storeElements(insertedItems);
      return divContent;
    },

    //returns the array of elements to be added to the DOM
    template: function(newItem,childCount){
      var checkBoxid = "checkBox"+childCount;
      var newItemToBeAdded = [];
      var count = 0;
      newItemToBeAdded[count++] = "<li class = 'customHorizontalRule'>";
      newItemToBeAdded[count++] = "<input type = 'checkbox' id = '"+checkBoxid+"' class = 'checkBox'/>";
      newItemToBeAdded[count++] = "<span>"+newItem+"</span>";
      newItemToBeAdded[count++] = "<a href = '#' class = 'moveRightSide' id = 'deletebutton"+childCount+"' >Delete</a>";
      newItemToBeAdded = newItemToBeAdded.join("");
      return newItemToBeAdded;
    }
  };
})();

// main.js
(function(){
    var toDoElements = {};
    var ulContainer = document.querySelector("#itemContainerId");
    var div = document.createElement("div");
    var listArray = [];

    document.addEventListener("DOMContentLoaded", function(event) {
        console.log("DOM loaded");
        //adding existing elements
        var preloadedItems = ["Eat","sleep"];
        preloadedItems.map(function(item)
            {
                listArray = MyNamespace.TimeForNewToDoItem(item);
                div.appendChild(listArray);
            }); 
        var newInputItem = document.getElementById("newToDoItem");
        var ulElement = document.getElementById("itemContainerId");
        var clrscr = document.getElementById("clearScreen");
        ulElement.addEventListener("click",AssignListeners);
        clrscr.addEventListener("click",clearScreen);
        newInputItem.addEventListener("keydown",check);
    });


    //checks for enter key
    function check(event){
        console.log("Keydown event listened");
        if(event.keyCode === 13){
            console.log("Enter key pressed, going to add new items");
            var newItem = document.getElementById("newToDoItem").value;
            MyNamespace.TimeForNewToDoItem(newItem);
        }
    }

})();
//item.js
(功能(){
//添加新待办事项的步骤
window.MyNamespace={
TimeForNewToDoItem:函数(newItem){
var newInputItem=document.getElementById(“newToDoItem”);
newInputItem.value=null;
var childCount=ulContainer.childNodes.length;
log(“当前在父ul元素中存在全部”+childCount+“子节点”);
var checkBoxid=“checkBox”+儿童计数;
var stat=“未检查”;
var divContent=模板(newItem,childCount);
console.log(“新增待办事项”);
var insertedItems={id:checkBoxid,名称:newItem,状态:stat};
存储元素(插入项);
返回内容;
},
//返回要添加到DOM的元素数组
模板:函数(newItem、childCount){
var checkBoxid=“checkBox”+儿童计数;
var newItemToBeAdded=[];
var计数=0;
NewItemToBedded[count++]=“”;
NewItemToBedded[count++]=“”;
newItemToBeAdded[count++]=“”+newItem+“”;
NewItemToBedded[count++]=“”;
newItemToBeAdded=newItemToBeAdded.join(“”);
返回newItemToBeAdded;
}
};
})();
//main.js
(功能(){
var toDoElements={};
var ulContainer=document.querySelector(“#itemContainerId”);
var div=document.createElement(“div”);
var listary=[];
document.addEventListener(“DOMContentLoaded”),函数(事件){
log(“加载DOM”);
//添加现有元素
var preload editems=[“吃”、“睡”];
PRELODEDITEMS.map(功能(项目)
{
listArray=MyNamespace.TimeForNewToDoItem(项);
div.appendChild(listArray);
}); 
var newInputItem=document.getElementById(“newToDoItem”);
var ulement=document.getElementById(“itemContainerId”);
var clrsc=document.getElementById(“clearScreen”);
添加监听器(“单击”,分配监听器);
clrsc.addEventListener(“单击”,清除屏幕);
新输入