简体   繁体   中英

Access function defined in separate .js file from a .js file

I've seen quite a few questions regarding loading a .js file into an HTML file, and I know how to do that. However, say I have the file "classlist.js." How can I go about using the classes defined in that javascript file in another javascript file? I keep seeing answers that suggest using the

<script type="text/javascript" src="filepath"></script>

syntax. When used in a .js file, though, it throws a syntax error on the "<" so I assume this code is invalid.

So, how would one utilize a function in a .js file that was defined in a separate .js file... that works, and is efficient (If there is one)?

EDIT: I'm going to clarify some thing for the future, since I'm still fairly new to Javascript, and it looks like there were a number of other factors I didn't even know came into play.

I had two .js files, one of which declared classes that were extensions of classes in the other file. I wanted to use the extended classes in a webpage, and I thought I had to load the originial classes into the second .js file, THEN load that .js file into the HTML file. I wasn't programming completely outside of HTML.

Sorry for any misunderstanding, hopefully this thread is helpful to somebody else in the future.

Assuming you are talking about javascript in a web browser, all js files are loading in an html file, typically index.html. You need to use the script tag to load the javascript in the proper order in that html file , not in the javascript file. So if file B requires the things in file A, you need to load file A first, meaning put the script tag that loads file A before the script tag that loads file B.

Two answers:

Non Browser

If you're using JavaScript in a non-browser environment (NodeJS, RingoJS, SilkJS, Rhino, or any of a bunch of others), the answer depends on the environment — but many of these use the CommonJS require mechanism . Eg:

// Get access to public symbols in foo.js
var foo = require("foo.js");

// Use the `bar` function exported by foo.js
foo.bar();

Browser

If you're using JavaScript in a browser, you put script tags like the one you quoted in the HTML, in the order in which they should be processed (so, scripts relying on things defined in other scripts should be included after the scripts they rely on).

If you want to maximize efficiency in terms of page load time, combine the scripts together on the server (probably also minifying/compressing/packing them) and use just the one script tag.

You have to put the reference to classlist.js in your HTML file (not your Javascript file), before any other SCRIPT element which requires it. For example, within the 'head' element:

<html>
<head>
  <script src="testclass.js"></script>
  <script src="file_using_testclass.js"></script>
  <script>
    var tc = new TestClass();
  </script>
</head>

上面发布的答案应该可以解决问题,但是由于您提到有效地执行此操作,您可以考虑查看基于 javascript 模块的加载程序,例如基于 AMD 的 require js( http://requirejs.org/ )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM