Вы можете использовать шаблон SINGLETON, который позволит инициализировать класс только один раз и создать только один объект, который будет использоваться всеми.
Counter.js
// Store the unique object of the class here
let instance = null;
export default class Counter {
constructor (params) {
// if an object has already been created return it
if (instance) return instance;
// initialize the new object
this.params = params;
this.counter = 0;
// store the new object
instance = this;
return instance;
}
// return the unique object or create it
static getInstance() {
return instance || new Counter();
}
}
a.js
const Counter = require('./class.js');
const counterObj = new Counter(params);
[119 ] b.js
const Counter = require('./class.js');
setTimeout(() => {
console.log(Counter.getInstance().getParams()) //Returns {}
}, 3000);
Когда вы переопределяете , в основном равны
. Когда вы хотите представить идею равенства, отличную от простого ссылочного равенства.
Строка является хорошим примером этого - две строки равны (при простом вызове Equals), если они представляют одну и ту же последовательность символов. Хеш-код отражает это так, что если две строки равны, они будут иметь одинаковый хеш-код. (Обратное не обязательно верно - две неравные строки могут иметь одинаковый хэш-код, но это маловероятно.)
(Строки хитры в других отношениях, учтите - есть много разных идей равенства, основанного на культуре и регистре, но String.Equals
просто смотрит на кодовые точки UTF-16, которые составляют строку, и сравнивает их самым простым способом.)
Если ваш тип должен следовать семантике значений (сравнение содержимого) вместо ссылочной семантики (сравнение идентичности объекта), вы должны написать собственное переопределение экземпляра object.Equals ().
Если вы переопределяете равно
, вы также должны переопределить GetHashCode
.
В .NET нет предварительно консервированного пустого словаря. Чтобы создать пустой словарь, просто перейдите в New Dictionary ().
Однако я считаю, что вам не разрешат использовать это значение по умолчанию для необязательного аргумента, потому что его нельзя вычислить во время компиляции и поместить в DefaultValueAttribute. Вместо этого вам нужно будет перегрузить функцию: одна перегрузка принимает аргумент словаря, а другая - нет. Последний просто создаст пустой словарь, как указано выше, и вызовет первую перегрузку.
--121 --- 3867223-- Если вы переопределяете Равно
, вы также должны переопределить GetHashCode
.