首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在另一个脚本中定义对象后调用函数

在另一个脚本中定义对象后调用函数
EN

Stack Overflow用户
提问于 2014-02-10 12:07:31
回答 3查看 74关注 0票数 0
代码语言:javascript
运行
复制
<script src="first.js"></script>
<script src="second.js"></script>

first.js

代码语言:javascript
运行
复制
var obj = {
    id: 1,
    xyz: function(){

    }
};

我想更新id并在second.js文件中调用xyz函数。最好的方法是什么?因为脚本将异步加载。

second.js

代码语言:javascript
运行
复制
obj.xyz();
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-10 12:13:07

更新

在对这个问题的评论中,你说你没有使用任何类型的脚本加载器。这意味着,根据您引用的标记,首先加载和执行first.js,然后加载和执行second.jssecond.js将在first.js完成之前不会加载并运行(或者直到first.js无法加载)。因此,second.js可以完成您展示的内容;除非first.js完全无法加载,否则obj将出现并等待。

最初的答案是基于对脚本异步加载的声明的

最好的方法是在两者之间建立某种形式的连接或消息传递。

但你可以通过投票来做。

second.js:

代码语言:javascript
运行
复制
(function() {
    attempt();

    function attempt() {
        if (typeof obj !== "undefined") {
            // Got it!
            obj.xyz();
        }
        else {
            setTimeout(attempt, 50);
        }
    }
})();
票数 1
EN

Stack Overflow用户

发布于 2014-02-10 12:33:48

尝试在窗口对象中强制obj定义为“全局”定义。

代码语言:javascript
运行
复制
window.obj = {
    id: 1,
    xyz: function(){
        alert("hey!");
    }
}

然后打电话

代码语言:javascript
运行
复制
window.obj.xyz();

代码语言:javascript
运行
复制
obj.xyz();
票数 0
EN

Stack Overflow用户

发布于 2014-02-10 12:20:20

在body标记中添加页面底部的所有脚本,您的脚本就会运行得很好。如果您仍然不确定(虽然没有理由),您可以在下面添加js调用:-

代码语言:javascript
运行
复制
document.addEventListener('DOMContentLoaded', function() {
   // your code here
}, false);

或者,如果使用jquery,则可以在以下内容中添加代码:-

代码语言:javascript
运行
复制
$(document).ready(function() {
    //your code
});
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21676810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档