Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从另一个js文件导入函数。Javascript_Javascript_Import - Fatal编程技术网

从另一个js文件导入函数。Javascript

从另一个js文件导入函数。Javascript,javascript,import,Javascript,Import,我有一个关于在javascript中包含文件的问题。 我有一个非常简单的例子: --> index.html --> models --> course.js --> student.js course.js: function Course() { this.id = ''; this.name = ''; } 学生有课程属性。像这样: import './course'; function Student() {

我有一个关于在javascript中包含文件的问题。 我有一个非常简单的例子:

--> index.html
--> models
      --> course.js
      --> student.js
course.js:

function Course() {
    this.id = '';
    this.name = '';
}
学生有课程属性。像这样:

import './course';

function Student() {
    this.firstName = '';
    this.lastName = '';
    this.course = new Course();
}
index.html如下所示:

<html>
    <head>
        <script src="./models/student.js" type="text/javascript"></script>
    </head>
    <body>
        <div id="myDiv">
        </div>
        <script>
        window.onload= function() {
            var x = new Student();
            x.course.id = 1;
            document.getElementById('myDiv').innerHTML = x.course.id;
        }
        </script>
    </body>
</html>

window.onload=function(){
var x=新学生();
x、 course.id=1;
document.getElementById('myDiv')。innerHTML=x.course.id;
}
但是我在“var x=new Student();”行上得到一个错误:

学生没有定义

当我从Student中删除导入时,我不再收到错误。 我尝试过使用(require、import、include、创建自定义函数、export),但没有一个对我有效

有人知道为什么吗?如何解决这个问题


另外,路径是正确的,它来自VS代码中的自动完成。默认情况下,脚本无法直接处理这样的导入。您可能会遇到另一个错误,即无法获取课程或无法进行导入

如果将
type=“module”
添加到
标记中,并将导入更改为
/course.js
(因为浏览器不会自动附加.js部分),那么浏览器将为您下拉课程,它可能会工作

import './course.js';

function Student() {
    this.firstName = '';
    this.lastName = '';
    this.course = new Course();
}


使用这两个文件,运行
npm安装
,然后
npm启动
,您将有一台服务器运行在
http://localhost:8000
它应该指向您的文件。

快速浏览一下MDN,我认为您可能需要在文件名的末尾包含
.js
,以便导入时读取
import./course.js'
而不是
import./course'

参考:
以下内容在Firefox和Chrome中适用。在Firefox中,它甚至可以从
文件://

models/course.js

models/student.js

index.html


从“./models/Student.js”导入{Student};
window.onload=函数(){
var x=新学生();
x、 course.id=1;
document.getElementById('myDiv')。innerHTML=x.course.id;
}

您可以尝试以下操作:

//------ js/functions.js ------
export function square(x) {
    return x * x;
}
export function diag(x, y) {
    return sqrt(square(x) + square(y));
}

//------ js/main.js ------
import { square, diag } from './functions.js';
console.log(square(11)); // 121
console.log(diag(4, 3)); // 5
<script type="module" src="js/main.js"></script>
您还可以完全导入:

//------ js/main.js ------
import * as lib from './functions.js';
console.log(lib.square(11)); // 121
console.log(lib.diag(4, 3)); // 5
通常我们使用
/fileName.js
导入自己的
js文件/模块
fileName.js
用于导入
包/库
模块

当您将main.js文件包含到网页中时,必须按如下所示设置type=“module”属性:

//------ js/functions.js ------
export function square(x) {
    return x * x;
}
export function diag(x, y) {
    return sqrt(square(x) + square(y));
}

//------ js/main.js ------
import { square, diag } from './functions.js';
console.log(square(11)); // 121
console.log(diag(4, 3)); // 5
<script type="module" src="js/main.js"></script>

有关更多详细信息,请查看

//使用calc.js中的模块

import { multiply } from './modules.js';

const result = multiply();

console.log(`Result: ${result}`);
//Module.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Module</title>
</head>
<body>

  <script type="module" src="./calc.js"></script>
</body>
</html>

模块
这是一个设计模式相同的代码可以在下面找到,请使用一个实时服务器来测试它,否则你会得到CORS错误


我现在可以链接到文档吗:我认为他在导入方面没有问题,他在尝试运行它的环境方面有问题。默认情况下,浏览器不处理导入。您是否在浏览器的F12开发工具窗口中观看了导入?浏览器尚不支持导入。可能在将来。检查此链接以了解更多信息himm,我将对此进行调查。不幸的是,它不起作用,现在它抛出了一个额外的异常。“无效响应。因此不允许访问源代码‘null’。”如果您看到这一点,则这是跨源代码异常。您是从
文件://
协议还是
http://
运行它?如果您是从
文件://
运行它,您将经历一段艰难的时光。文件://。那怎么办呢?如何解决这个问题?最好的方法是使用某种服务器通过
localhost
为他们提供服务。有些IDE内置了它们。您还可以用几行代码编写一个快速的
express
服务器。在我的回答中,我会给你一个例子。我不能使用任何服务器。很遗憾,无法工作,通过:访问'file:///........./models/student.js“来源”的“null”已被CORS策略阻止:响应无效。因此不允许访问源代码“null”。@SamySammour这是我在Chrome中得到的,但它在Firefox中也能工作。没关系;在生产环境中,您无论如何都要为文件提供服务(这会使错误消失)。这是如何实现浏览器模块支持的当前状态,因此这是您的问题的答案,无论它是否适用于您;)它在Firefox上也不起作用。它遇到了一个异常“未声明HTML文档的字符编码。如果文档包含US-ASCII范围以外的字符,则在某些浏览器配置中,文档将以乱码文本呈现。页面的字符编码必须在文档或传输协议中声明。”屏幕上没有输出如果你看到一个
1
,它就工作了。异常是不相关的,是由于您的
中没有
造成的。我已经提到没有输出,屏幕是空的。为什么javascript必须如此复杂从快速浏览您的答案我可以看出您错了。未经适当努力,请勿发布答案。
<script type="module" src="js/main.js"></script>
//In module.js add below code

export function multiply() {
    return 2 * 3;
}
import { multiply } from './modules.js';

const result = multiply();

console.log(`Result: ${result}`);
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Module</title>
</head>
<body>

  <script type="module" src="./calc.js"></script>
</body>
</html>