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

时间:2012-10-10 05:50:52

标签: 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();

我得到例外: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对象。我怎样才能实现这一目标?

8 个答案:

答案 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.jsfile2.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}}。为了使用它,您将需要使用constructorCustomer()

首先,您需要在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)

对我来说,这有点愚蠢。

我在第一个文件中出现语法错误,因此第二个文件无法加载它。