Предположим, что у меня есть файл примера import.js
var self;
function Test(a,b){
this.a = a;
this.b = b;
self = this;
}
Test.prototype.run = function(){
console.log(self.a, self.b)
}
module.exports = Test
Когда я требую файл и создаю один новый "объект", все работает отлично, но когда я создаю второй объект, у них обоих есть доступ к себе, только последний работает.
var Test = require('./import.js');
var one = new Test(1,2);
one.run()
1 2
var two = new Test(3,4);
two.run()
3 4
one.run()
3 4
Есть ли способ повторно потребовать файл, чтобы он создавал отдельные области?
Помещая это как две разные переменные, не работает,
var Test1 = require('./import')
var Test2 = require('./import')
var one = new Test1(1,2);
var two = new Test2(3,4);
two.one()
3 4
Но дублирование файла делает именно то, что я ищу.
var Test1 = require('./import1');
var Test2 = require('./import2');
var one = new Test1(1,2);
var two = new Test2(3,4);
two.one();
1 2
Возможно ли это без изменения файла import.js или его дублирования?
Изменить:
Да, перезапись self
в this
будет работать, но это не то, что я прошу. Я хотел бы знать, можно ли восстановить другой масштаб.
Настоящий файл import.js может содержать надежные объекты с рекурсивными вызовами, которые передаются через другие функции. Имея верхний уровень self
, освобождает вас от любой необходимости или беспокойства о сфере видимости и привязке.
Предполагая, что у вас сложный файл, и он всегда требуется один раз, но теперь для тестирования или того, что вы хотели бы импортировать дважды... Каковы другие варианты перекодирования вашей работы?