怎么在一个函数里修改另外一个函数里的函数?

假设我现在有一段代码

function globalActions(){
  App = function(obj) {
    console.log('This is a global App, app id is ' + obj.id);
  }
  Page = function(obj) {
    console.log('This is a global Page, page id is ' + obj.id);
  }
  App({id: 'app'});
  Page({id: 'page'});
  myGlobalActions();
}
function pluginActions(){
  let originalMyPluginActions = myPluginActions;
  myPluginActions = function(){
    App = undefined
    Page = function(obj) {
      console.log('This is a plugin Page, page id is ' + obj.id);
    }
    originalMyPluginActions.apply(this, arguments);
  }
}
function myGlobalActions(){
  myPluginActions(App, Page);
}
function myPluginActions(){
  let originalApp = arguments[0];
  let originalPage = arguments[1];
  arguments[0] = function() {
    console.log('hello I try to modify the global App fn');
    return originalApp.apply(this, arguments);
  };
  arguments[1] = function() {
    console.log('hello I try to modify the global Page fn');
    return originalPage.apply(this, arguments);
  };
}
pluginActions();
globalActions();

在myGlobalActions里定义App或Page(App = / Page =)是禁止的,能够修改的只有myGlobalActions和myPluginActions,请问怎么才能修改globalActions里的App和Page?

阅读 1.5k
2 个回答

如果是你提供的条件,那么是修改不了的,用术语说,这是 globalActions 函数的私有属性,外部是修改不了的。

动态更改一个块级作用域内部的变量,只能用闭包实现

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