在该范围函数内部调用本地函数之前,如何禁用它?

时间:2018-10-08 02:33:54

标签: javascript

我在onView(withId(R.id.edToNumber)).perform(typeText("MDO158"); onView(withId(R.id.edToNumber)).perform(closeSoftKeyboard()); 中有一个a()和一个b()。我无法对a()进行任何更改,但希望使其无法从外部拨打。

因此,我想到了保存b()的引用,然后将其设置为b()的想法。但是,它不起作用。

对我有什么提示吗?

null

3 个答案:

答案 0 :(得分:1)

这是一种方法:将函数包含在自执行的匿名函数中。这很有用,因此您可以缓存一个标志,该标志确定b()是否应运行。然后将静态方法添加到a()中以切换此内部标志。 runB下面的示例就是这样的标志。请注意,不会引发任何错误,但是您可以根据需要触发错误。

(function(parent){
  var runB = true;
  
  function b(){    
    console.log('Executed b()');    
  }
  
  function a(){
    setTimeout(function(){
      if(runB) {
        b();
      } else {
        console.log('Skipped b()')
      }
    }, 500);
    console.log('Executed a()');
  }
  
  a.disableB = function(){
    runB = false;
  }
  
  parent.a = a;  
})(window);

// Run it normally
a();

// Run it without b()
setTimeout(function(){
  a();
  a.disableB();
}, 550);

答案 1 :(得分:0)

我不知道这是否是一个好习惯,但是您可以将window.bref包装在另一个函数中。因此,我在这里检查window.bref是否是一个函数,如果是,则调用它,或者什么也不做。此输出不再调用b()

function a(){
  setTimeout(() => {
    typeof window.bref === 'function' ? window.bref() : null;
  }, 1000);
  function b(){
    console.log('called');
  }
  window.bref = b;
  
  console.log('finish setting');
}

a();
window.bref = null;
console.log('make b() fail to call')

答案 2 :(得分:0)

尝试使用let:

function a(){
  let b = function(){
    console.log('called');
    alert('b called');
  }
  setTimeout(b, 1000);
  console.log('finish setting');
}

a();
try{b();}
catch(e){console.log("b is not called")}