Get javascript classes?

I am trying to create a framework in javascript. I wanted to try to create a player class by doing this:

class Test {
    name

    constructor(_name) {
        this.name = _name
    }

    printsomething() {
        console.log("printed this")
    }
}

let Player = new Test("jdaida")

exports('getPlayer', () => {
    return Player
})
on('getPlayer', (cb) => {
    cb(Player)
})

but when i try to get the player in another script by doing this:

RegisterCommand("test", () => {
    let corePlayer = exports.ScriptJS.getPlayer()
    corePlayer.printsomething()
})
emit('getPlayer', (resp) => {
    resp.printsomething()
})

I get this error:

Does anyone know how to do this?

Make a function to return an object instead of the class prototype

// Psudo code
class Player {
   getName()
   getMoney()
   ...
   getPlyObj() {
      return {
          getName: this.getName,
          getMoney: this.getMoney,
     }
   }
}

It does not work for functions like theese

// Main script

class Test {
    name

    constructor(_name) {
        this.name = _name
    }

    setName(newName) {
        this.name = newName
    }

    getName() {
        return this.name
    }

    copy() {
        return {
            name: this.name,
            getName: this.getName,
            setName: this.setName,
        }
    }
}

let Player = new Test("jdaida")

on('getPlayer', (cb) => {
    cb(Player.copy())
})
// Caller script

emit('getPlayer', (resp) => {
    console.log(resp.name) // Returns name
    console.log(resp.getName()) // Returns null
})

Hi @Momin14,
It seems that the object loses its context when you try to export it.
The simplest option, if you need to use classes is to do multiple exports.
I have prepared an example for you

// provider/client.js
class PlayerBlueprint {
  _name;

  constructor(name) {
    this._name = name;
  }

  set name(name) {
    this._name = name;
  }

  get name() {
    return this._name;
  }
}
const player = new PlayerBlueprint(GetPlayerName(PlayerId()));
exports("getPlayerName", () => player.name);
exports("setPlayerName", (name) => player.name = name);
// customer/client.js
(() => {
    console.log(exports["user-provider"]["getPlayerName"]());
    exports["user-provider"]["setPlayerName"]('SomeoneNew');
    console.log(exports["user-provider"]["getPlayerName"]());
})();

If you wish, you can also do something like this

// provider/client.js
const player = {
    _name: '',
    getName: () => this._name,
    setName: (name) => this._name = name
}
player.setName(GetPlayerName(PlayerId()));
exports("getPlayer", () => player);
// customer/client.js
(() => {
    console.log(exports["user-provider"]["getPlayer"]().getName());
    exports["user-provider"]["getPlayer"]().setName("SomeoneNew");
    console.log(exports["user-provider"]["getPlayer"]().getName());
})();