gpt4 book ai didi

javascript - 在 JavaScript 中使用其他文件中的函数

转载 作者:行者123 更新时间:2023-11-28 05:34:27 24 4
gpt4 key购买 nike

我正在使用 P5 用 JS 制作游戏,我遇到了一个问题。

在我的 html 文件中,我引用了 .js 文件:

<!DOCTYPE html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.3/p5.min.js"></script>
<script src="main.js"></script>
<script src="isKeyPressed.js"></script>
<script src="blocks.js"></script>
<script src="player.js"></script>
</head>
<body>
</body>
</html>

我有一个 .js 文件定义函数 isKeyPressed():

function isKeyPressed(keyQuery) {
var did = false;
for(var i = 0; i < keysPressed; i++) {
if(keysPressed[i] === keyQuery) {
did = true;
}
}
return did;
}

我在player.js中的另一个对象中引用了它:

player.motion = function() {
if(isKeyPressed('w')) {
this.velocity.add(0,-5);
}
if(isKeyPressed('s')) {
this.velocity.add(0,5);
}
if(isKeyPressed('a')) {
this.velocity.add(-5,0);
}
if(isKeyPressed('d')) {
this.velocity.add(5,0);
}
}

但是当我尝试调用player.motion时,我收到错误:

Uncaught TypeError: isKeyPressed is not a function

有谁知道为什么会出现这种情况吗?

最佳答案

郑重声明,我认为接受的答案不正确。具体来说,我认为接受的答案并没有真正改变您最初所做的事情。我的猜测是您的代码中存在另一个问题(例如语法错误)导致了此错误,并且您在实现建议的解决方案的过程中修复了该问题。因此,虽然该解决方案看起来可能解决了您的问题,但实际上却是另外一回事。

我提供这个替代答案,这样您就不必直接在 html 中定义 JavaScript,因为情况绝对不是这样。

我尝试通过创建一个由三个文件组成的较小示例来测试您的设置:

index.html

<!DOCTYPE html>
<html>
<head>
<script src="one.js"></script>
<script src="two.js"></script>
</head>
<body onload="printObj()">
</body>
</html>

one.js

function printOne(){
console.log("one");
}

two.js

var obj = {};

obj.printTwo = function(){
console.log("two");
printOne();
}

function printObj(){
obj.printTwo();
}

这几乎正是您的设置,并且工作正常。您绝对不需要需要将 JavaScript 放入 html 中。只要 JavaScript 文件以正确的顺序正确加载,您就可以在另一个文件中使用一个文件中的函数和变量。

有两个主要因素可能会导致您的问题:

您的文件加载正确吗?

  • 是否有任何您没有注意到的语法错误? (这是我对导致您最初问题的原因的猜测。)检查 JavaScript 控制台,并尝试运行一些测试代码以实际运行您尝试调用的函数。
  • 所有文件名都正确吗?
  • 您是否处于防火墙后面,或者是否存在其他可能导致加载问题的网络问题?

您的文件加载顺序是否正确?

  • 要让文件 two.js 访问 one.js 中定义的代码,您必须确保 one.jstwo.js。看起来您已经正确完成了此操作,但您确定 JavaScript 位于您认为的位置吗?
  • 换句话说,您确定它位于 player.js 中而不是 main.js 中吗?
  • 您可能希望通过将相关 JavaScript 放在同一个文件中来消除这种歧义。让一个文件定义 keysPressed 数组,然后另一个文件使用该数组定义 isKeyPressed() 函数,这没有多大意义。只需将它们放在同一个文件中,并确保该文件在使用该文件的其他文件之前加载。

接受的答案不会改变任何关于加载内容的时间。除非您有语法错误,或者 player.motion() 函数实际上是在 main.js 文件中,或者您遇到网络加载问题,您的代码应该可以正常工作。所以其中一件事一定是你的实际问题。 您不必在 html 中定义 JavaScript 即可使其正常工作。

关于javascript - 在 JavaScript 中使用其他文件中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39460763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com