Javascript 在父函数中修改函数的setter后,是否可以重新定义函数?

Javascript 在父函数中修改函数的setter后,是否可以重新定义函数?,javascript,Javascript,我只能更改函数a中的代码。例如,如果我有: Object.definePropertywindow,'App',{get:console.log.bindnull,'World'} 微信会将我的代码转换成: __wxJSEngine.App = console.log.bind(null, 'Hello') g.App = __wxJSEngine.App Object.defineProperty(g, 'App', { set: ()=> { console.error

我只能更改函数a中的代码。例如,如果我有:

Object.definePropertywindow,'App',{get:console.log.bindnull,'World'}

微信会将我的代码转换成:

__wxJSEngine.App = console.log.bind(null, 'Hello')

g.App = __wxJSEngine.App

Object.defineProperty(g, 'App', {
  set: ()=> {
    console.error("You are not allow to modify App");
  }
})

((App, Function, window) => {
  'use strict';
  function a() {
    'use strict';
    // *** I can only modify codes within this block ***
    Object.defineProperty(window, 'App', { get: console.log.bind(null, 'World') });
    // *** I can only modify codes within this block ***
  }
  function b() {
    'use strict';
    App();
  }
  a();
  b();
})(g.App, ()=>(()=>({})), undefined);

现在,我想修改函数a中的应用程序,这样我就可以在函数b中更改它的行为,这样它就可以打印World而不是Hello。

对象合成是指将属性从一个对象复制到另一个对象。这是goto方法

常量App=func=>{ 称呼:=>{ 返回`${func.user}:${func.HW}`; } }; const a=用户,问候语=>{ 设func={ 使用者 HW:问候语 }; 返回Object.assignfunc,Appfunc; }; 常数A=A'zer00ne'、'World'; console.logA.user;
console.logA.saltation 给定代码的结构,函数b将不使用全局应用程序,而是直接使用沙盒的参数。 a的作用域可以访问此参数,并且未声明为常量

因此,您需要做的就是从a内部覆盖变量App的值,以便b可以使用您自己的值

window.App=console.log.bindnull,“你好” Object.definePropertywindow“应用程序”{ 设置:=>{ console.Error不允许修改应用程序; } } const sandbox=应用程序、函数、窗口=>{ "严格使用",; 功能a{ "严格使用",; //***我只能修改此块中的代码*** App=console.log.bindnull,“世界”; //***我只能修改此块中的代码*** } 功能b{ "严格使用",; 应用程序; } A. B };
App,=>=>{},未定义;请尝试Object.assign而不是Object.defineBut Object.assign哪个对象?函数a中的参数不是{…}?什么参数?常量应用是在函数a之外定义的。您最近几分钟使用的函数a中有参数。不管怎么说,那是无关紧要的。请参阅我关于Object的帖子。是的,我不允许修改函数a之外的代码。函数afunc{'use strict';Object.define???,'App',{get:console.log.bindnull,'World'};},它只是向您展示如何使用Object.assign。我的代码是概念的证明。如果你真的能提供a,我可能只通过改变函数a来重构它。是的,我知道Object.assign是如何工作的…请更新你的答案。是的,你显然不明白a是什么。我这边没有什么可以更新的,除非你把你这边更新成一个新的。不管凯伊多有什么答案,说凯伊多的答案不起作用都是可笑的。我很确定你没有理解或者只是不想投入精力,或者你的问题无法回答,需要编辑,可能是?App=console.log.bindnull,“World”;将导致错误。不,不会。不是你给的。你可以按“运行代码段”按钮自己查看。这看起来像是我上次更新问题时犯的错误。“让我来修吧。”王先生也一样。你的错误是什么?如果是因为你不允许修改应用程序,那就意味着沙盒的第一个参数没有声明为应用程序,而根据我的答案的最后一条,你就完蛋了。所以你决定否决那些花时间回答你问题的人,因为你不能给他们正确的问题描述?至少听起来很刺耳。如果你不能正确地提问,任何人都无法回答你的问题。你想让我们怎么猜这80+K行中有什么?