Доступ к статическому свойству класса javascript без использования экземпляра класса

Я пытаюсь получить доступ к статическим свойствам класса без использования экземпляра класса для этого. Я пытался адаптировать метод в этом посте, но безрезультатно. Все, что я получаю, это test.getInstanceId is not a function

Основываясь на том, как я создаю класс (ниже), как я могу это сделать? Вот скрипка .

test = (function() {
  var currentInstance;

  function test() {
    this.id = 0;
    currentInstance = this;
    // this won 't work
    this.getInstanceId = function() {
      return currentInstance.id;
    }
  }


  test.prototype.setId = function(id) {
    this.id = id;
  }

  return test;
})();


var myTest = new test();
myTest.setId(1);
console.log(myTest.id)
console.log(test.getInstanceId());

2 ответа

  1. Как следует из моего комментария, вы используете test.getInstanceId()вместо myTest.getInstanceId()

    var test = (function() {
      var currentInstance;
      /* This won't work
      function getInstanceId(){
          return currentInstance.id;
      }
      */
    
      function test() {
        this.id = 0;
        currentInstance = this;
        // this won 't work
        this.getInstanceId = function() {
          return currentInstance.id;
        }
      }
    
    
      test.prototype.setId = function(id) {
        this.id = id;
      }
    
      return test;
    })();
    
    
    var myTest = new test();
    myTest.setId(1);
    console.log(myTest.id)
    console.log(myTest.getInstanceId());
    

    Fid: https://jsfiddle.net/gt0wd8hp/10/

  2. Благодаря RobG, код ниже работает. Он делает переменную общедоступной, устанавливая ее с помощью test.currentInstance = .... Вот работающая скрипка .

    При осмотре объектаtest, теперь публичный varcurrentInstance, кажется,» живет » вне прототипа testфункции, что я не понимал, было возможно.

    Я не исправил соглашение об именовании, на которое он указал, — это должен быть тест, а не тест.

    test = (function() {
      test.currentInstance = undefined;
    
      function test() {
        this.id = 0;
        test.currentInstance = this;
      }
    
    
      test.prototype.setId = function(id) {
        this.id = id;
      }
    
      return test;
    })();
    
    
    
    var myTest = new test();
    myTest.setId(1);
    console.log(myTest.id)
    console.log(test.currentInstance.id);