Как переопределить возвращаемый javascript метод IIFE в объекте?

У меня есть один контент IIFE, который выглядит так:

var A = (function() { 
     var method1 = function() { 
         alert("PARENT METHOD");
     }
     var method2 = function() {
        method1();
     }

    return {
        method1: method1,
        method2: method2
    }
})();

Я хочу переопределить этот метод1 в другом объекте javascript таким образом, чтобы этот метод2 выполнялся, тогда он будет вызывать переопределенный метод1, а не этот оригинальный метод1. Заранее спасибо.

2 ответа

Решение

Вам нужно будет использовать прототип, чтобы выполнить это так, как вам бы хотелось. Посмотрите на пример ниже.

var A = (function() { 
   var api = function(){}
     
     api.prototype.method1 = function() { 
         console.log("PARENT METHOD");
     }
     
     api.prototype.method2 = function() {
        this.method1();
     }

    return new api();
})();

A.method2();
A.method1 = function() { console.log('child method');}
A.method2();

Если я понимаю, что вы спрашиваете, вы можете просто установить значение method2 (в вашем объекте API) переопределенному методу (B "s method1 в этом примере). поскольку A создается с использованием IIFE, объект, содержащий переопределенный метод, должен быть объявлен до A или вы получите ошибку ссылки.

var B = {
  method1: function() {
    console.log('This is method2 in B!');
  }
}

var A = (function() {
  var method1 = function() {
    alert("PARENT METHOD");
  }
  var method2 = function() {
    method1();
  }

  return {
    method1: method1,
    method2: B.method1
  }
})();


//call A.method2
A.method2();

Другие вопросы по тегам