假设我在file1.js中定义了一个类
function Customer(){
this.name="Jhon";
this.getName=function(){
return this.name;
};
};
现在,如果我想在file2.js中创建一个Customer对象
var customer=new Customer();
var name=customer.getName();
我得到例外:Customer is undefined, not a constructor.
但是当我在file2.js中创建一个客户对象并将其传递给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对象。我怎样才能实现这一目标?
答案 0 :(得分:13)
这取决于您运行的环境。在网络浏览器中,您只需确保在file1.js
之前加载file2.js
:
<script src="file1.js"></script>
<script src="file2.js"></script>
在node.js中,推荐的方法是将file1设为module,然后您可以使用require
函数加载它:
require('path/to/file1.js');
也可以使用require.js库在HTML中使用节点的模块样式。
答案 1 :(得分:6)
您可以将方法导出为从其他文件中访问:
file1.js
var instance = require('./file1.js');
var name = instance.getName();
file2.js
def locate_second_divisor(xs, n):
count = 0
index = 0
for num in xs:
count += (n % num) == 0
if count == 2:
return index
else:
index += 1
print(locate_second_divisor([20,3,5,3,4], 12))
# 3
答案 2 :(得分:4)
在file2中运行代码之前确保已加载dom ...如果您正在使用jQuery:
$(function(){
var customer=customer();
var name=customer.getName();
});
然后,无论文件的顺序如何,在加载所有文件之前代码都不会运行。
答案 3 :(得分:2)
如果您在HTML中使用javascript,则应在html中包含file1.js
和file2.js
:
<script src="path_to/file1.js"></script>
<script src="path_to/file2.js"></script>
注意,file1
应该在file2
之前出现。
答案 4 :(得分:2)
使其可行的可能建议:
一些修改(你忘了在声明this.getName=function(){...}
中加一个分号,它应该是this.getName=function(){...};
)
function Customer(){
this.name="Jhon";
this.getName=function(){
return this.name;
};
}
(这可能是问题之一。)
和
确保以正确的顺序链接JS文件
<script src="file1.js" type="text/javascript"></script>
<script src="file2.js" type="text/javascript"></script>
答案 5 :(得分:2)
// Create Customer class as follows:
export default class Customer {}
// Import the class
// no need for .js extension in path cos gets inferred automatically
import Customer from './path/to/Customer';
// or
const Customer = require('./path/to/Customer')
// Use the class
var customer = new Customer();
var name = customer.getName();
答案 6 :(得分:1)
这是因为该值是undefined
,因为它是构造函数function
,而不是带有class
的{{1}}。为了使用它,您将需要使用constructor
或Customer()
。
首先,您需要在file2.js之前 之前加载file1.js,如slebetman所说:
customer()
然后,您可以按以下方式更改file1.js:
<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;
};
}
}
如果我错了,请纠正我。
答案 7 :(得分:0)
对我来说,这有点愚蠢。
我在第一个文件中出现语法错误,因此第二个文件无法加载它。