Перехват вызовов конструктора в Javascript

#javascript #constructor

#javascript #конструктор

Вопрос:

Где-то конструктор определяется как

 var Something = function() {
    // do stuff
}
  

Если бы я мог вставить строку

 mydebug.Something = this;
  

вначале я мог бы сохранить самый последний созданный экземпляр Something , что помогло бы мне в отладке. Я не могу, но мне передают Something (функцию и ее имя) и я могу заменить ее чем-то другим. Я просто не знаю, как заставить «что-то еще» вести себя как оригинал.

 function intercept(someConstructor, someName) {
    return function <<someName>> () { // 1
        var result = <<create a new instance>>; // 2
        mydebug[someName] = resu<
        return resu<
    }
}
  

который вызывался бы как

  intercept(Something, "Something")
  

Существует как минимум две проблемы:

  1. Я не знаю, как создать функцию, имеющую имя, заданное переменной.
  2. Я не знаю, как создать экземпляр.

Ответ №1:

Для 1:

В зависимости от того, где вы храните эту функцию, вам не обязательно называть ее в вашей реализации intercept.

Вы можете просто сделать return function () { ... или вы можете сделать что-то похожее на someObject[someName] = function()... , а затем вернуть someObject[someName] .

Для 2:

Если я правильно понимаю, вы должны быть в состоянии просто сделать var result = new someConstructor(); , но мне не на 100% ясна ваша цель.