我有两个函数,a函数里有两个方法且a函数在b函数内执行,请看问题描述。。?

f1 = function () {
    this.init = function () {
        alert(1);
        this.init2();
    }
    this.init2 = function () {

        console.log(11)
    }

};

f3 = function () {
    var VarF1 = new f1();
    VarF1.init();
};

<body>
<script>
    var bbb = new f3();
</script>
</body>

我不想执行f1内的init2方法,请问我该怎么做?
谢谢

阅读 2.3k
4 个回答

把f3当做f1的子类,再覆盖掉init2就好了

function F1() {
    this.init = function () {
        alert(1);
        this.init2();
    };
    this.init2 = function () {
        console.log(11)
    };

}

function F3() {
    F1.call(this);
    this.init2 = function() {
      
  };
  this.init();
  
}

var bbb = new F3();

在init方法内删除对init2的调用不就可以了吗
在f3里面覆盖init2不是也可以吗

如果你可以控制 f1 或者 f3 的实现话就好办,方法太多了,可以加 flag 判断要不要调用 init2,或者依赖倒转传入 init2 给 init,在 f3 中覆盖掉 f1 实例的 init2 等等...

但看你提这个问题,猜测应该是不能控制 f1 和 f3 本身的代码,那么可以用一个替身暂时换掉 f1 的 init2,即复制一遍 f1 的代码,然后删掉 init2 的函数体部分,思路如下:

var f1Double = function f1 () {
    this.init = function () {
      alert(1);
      this.init2();
    };
    this.init2 = function () { };
};

function instantiateF3WithoutInit2 () {
  var f1Bak = f1;
  f1 = f1Double;
  var insF3 = new f3();
  f1 = f1Bak;
  return insF3;
}

var bbb = instantiateF3WithoutInit2();
this.init = function () {
        alert(1);
        this.init2();
    }

这个init2 是必须的吗?如果不是,写个判断按需加载init2 试试~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题