Как создать экземпляр 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();