Как создать экземпляр javascript-класса в другом файле js?

Предположим, если я определяю класс в файле1.js

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

Теперь, если я хочу создать объект Customer в файле2.js

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

Я получаю исключение: Customer is undefined, not a constructor.

Но когда я создаю объект customer в файле2.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();

но я хочу создать объект customer в файле file1.js, используя новый Customer(). Как я могу это достичь?

Ответ 1

Это зависит от того, в какой среде вы работаете. В веб-браузере вам просто нужно убедиться, что file1.js загружен до file2.js:

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

В node.js рекомендуемым способом является make file1 a module, тогда вы можете загрузить его с помощью require функция:

require('path/to/file1.js');

Также возможно использовать стиль модуля node в HTML, используя библиотеку require.js.

Ответ 2

Вы можете экспортировать свои методы для доступа из других файлов, таких как:

file1.js

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

file2.js

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

Ответ 3

Убедитесь, что dom загружен до запуска вашего кода в файле2... Если вы используете jQuery:

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

Тогда не имеет значения, в каком порядке находятся файлы, код не будет работать до тех пор, пока все файлы не будут загружены.

Ответ 4

Если вы используете javascript в HTML, вы должны включить file1.js и file2.js в свой html:

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

Примечание. file1 должен быть первым до file2.

Ответ 5

Возможные предложения, чтобы заставить его работать:

Некоторые модификации (U забыл включить точку с запятой в оператор this.getName=function(){...}, она должна быть this.getName=function(){...};)

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

(Это может быть одной из проблем.)

и

Убедитесь, что U привязывает файлы JS в правильном порядке

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

Ответ 6

// 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();