Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.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 - Fatal编程技术网

如何在另一个js文件中实例化javascript类?

如何在另一个js文件中实例化javascript类?,javascript,Javascript,假设我在file1.js中定义了一个类 function Customer(){ this.name="Jhon"; this.getName=function(){ return this.name; }; }; 现在如果我想在file2.js中创建一个Customer对象 var customer=new Customer(); var name=customer.getName(); 我得到一个例外:客户未定义,不是构造函数。 但是当我在file

假设我在file1.js中定义了一个类

function Customer(){
    this.name="Jhon";
    this.getName=function(){
        return this.name;
    };
};
现在如果我想在file2.js中创建一个Customer对象

var customer=new Customer();
var name=customer.getName();
我得到一个例外:
客户未定义,不是构造函数。

但是当我在file2.js中创建一个customer对象并将其传递给file1.js时,它就开始工作了

file1.js

    function Customer(){
        this.name="Jhon";
        this.getName=function(){
            return this.name;
        }
    }
    function customer(){
        return new Customer();
    }

file2.js

    var customer=customer();
    var name=customer.getName();

但是我想使用new customer()在file1.js中创建一个customer对象。我怎样才能做到这一点

如果在HTML中使用javascript,则应在HTML中包含
file1.js
file2.js

<script src="path_to/file1.js"></script>
<script src="path_to/file2.js"></script>


注意,
file1
应该放在
file2
之前

使其工作的可能建议:

一些修改(您忘记在语句中包含分号
this.getName=function(){…}
它应该是
this.getName=function(){…};

(这可能是问题之一。)

确保以正确的顺序链接JS文件

<script src="file1.js" type="text/javascript"></script>
<script src="file2.js" type="text/javascript"></script>

这取决于您运行的环境。在web浏览器中,您只需确保在
file2.js
之前加载
file1.js

<script src="file1.js"></script>
<script src="file2.js"></script>

还可以使用库在HTML中使用节点的模块样式。

在文件2中运行代码之前,请确保已加载dom。。。如果您正在使用jQuery:

$(function(){
  var customer=customer();
  var name=customer.getName();
});

然后,无论文件的顺序如何,在加载所有文件之前,代码都不会运行。

您可以导出您的方法以从其他文件访问,如下所示:

file1.js

var name = "Jhon";
exports.getName = function() {
  return name;
}
file2.js

var instance = require('./file1.js');
var name = instance.getName();

它表示该值是未定义的,因为它是一个构造函数
函数
,而不是带有
构造函数的
。要使用它,您需要使用
Customer()
Customer()

首先,您需要在file2.js之前加载file1.js,正如slebetman所说:

<script defer src="file1.js" type="module"></script>
<script defer src="file2.js" type="module"></script>
以及file2.js,如下所示:

export default class Customer(){
    constructor(){
        this.name="Jhon";
        this.getName=function(){
            return this.name;
        };
    }
}
import { Customer } from "./file1";
var customer=new Customer();

如果我错了,请纠正我。

尽管此解决方案非常有效,但这需要在nodejs配置中设置babel。不要用艰苦的方式学习@克里希纳——这可能是我的问题。当类在单独的文件中定义时,文件之间传递的实例不会识别类实例并允许使用方法。您是否有指向babel安装解决方案的链接?@user172431
npm安装babel cli babel core--保存开发人员
。搜索[我得到两个错误。一,
SyntaxError:export声明可能只出现在模块的顶层
2,
ReferenceError:require没有定义
@AaronFranke,
require
上面是针对
Node.js
应用程序的,但是有一个
require.js
库文件可以添加到项目中[npmjs.com/package/require.js]或[npmjs.com/package/require.js]。
ReferenceError:require未定义
更改订单对我有效。谢谢
<script defer src="file1.js" type="module"></script>
<script defer src="file2.js" type="module"></script>
export default class Customer(){
    constructor(){
        this.name="Jhon";
        this.getName=function(){
            return this.name;
        };
    }
}
import { Customer } from "./file1";
var customer=new Customer();