从外部JS调用函数

Sam*_*hal 1 html javascript html5 canvas

我试图从外部.js文件调用一个函数,但控制台返回错误,并且没有调用该函数.如何更正我的代码并能够正确调用该函数.

这是主要的.html文件:

<html>
<head>
    <script type="text/javascript" src="xp.js">
    </script>
    <script type="text/javascript">
        window.onload = xyz.makeShape.Circle();
    </script>
</head>
<body>
    <canvas id="xyz" width="600" height="600"></canvas>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这是.js文件:

var xyz = xyz || {};
var canvas = document.getElementById('xyz');
var context = canvas.getContext('2d');
xyz.makeShape = {
    Circle : function() {
        console.log('working');
    }
}
Run Code Online (Sandbox Code Playgroud)



编辑

我在控制台中收到2个错误:

错误1

TypeError: canvas is null
window.onload = xyz.makeShape.Circle;
Run Code Online (Sandbox Code Playgroud)


错误2

TypeError: xyz.makeShape is undefined
window.onload = xyz.makeShape.Circle;
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 5

改变这个:

window.onload = xyz.makeShape.Circle();
Run Code Online (Sandbox Code Playgroud)

对此:

window.onload = xyz.makeShape.Circle;
Run Code Online (Sandbox Code Playgroud)

window.onload 需要设置为函数引用,而不是调用函数的结果.


<head>在加载DOM之前,您也无法从该部分执行以下两行:

var canvas = document.getElementById('xyz');
var context = canvas.getContext('2d');
Run Code Online (Sandbox Code Playgroud)

您需要在加载DOM后执行这些操作.这样做有多种可能的策略.您已经拥有的最简单的方法是在onload处理程序中执行它们,因为您知道DOM已经加载到那里.您还可以移动脚本标记,将外部.js文件加载到该<body>部分的末尾,并且DOM已经准备就绪,然后运行该js文件.

  • @SamarthWahal - 现在来吧."它还没有工作"告诉我们你所看到的一切都没什么.你希望我们猜到吗?通过准确描述正在发生的事情以及错误控制台中的内容,帮助那些试图帮助您的人. (2认同)