Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
之前声明的对象内的Javascript函数():“was called”事件?_Javascript - Fatal编程技术网

之前声明的对象内的Javascript函数():“was called”事件?

之前声明的对象内的Javascript函数():“was called”事件?,javascript,Javascript,如何检测调用了getX来触发另一个函数 限制:模块只能在声明后修改,因为此对象是从远程网站加载的脚本接收的。目标是成为一只老虎 A.此脚本是从其他网站加载的 这个脚本在我的网站上 用于覆盖旧函数,并在新函数中触发您想要触发的任何内容,然后调用旧函数 变量模块={ x:42, getX:函数{ 归还这个.x; } }; 函数ListentFunctionObject、propertyName、回调{ var oldProperty=对象[propertyName]; 如果typeof oldPr

如何检测调用了getX来触发另一个函数

限制:模块只能在声明后修改,因为此对象是从远程网站加载的脚本接收的。目标是成为一只老虎

A.此脚本是从其他网站加载的

这个脚本在我的网站上

用于覆盖旧函数,并在新函数中触发您想要触发的任何内容,然后调用旧函数

变量模块={ x:42, getX:函数{ 归还这个.x; } }; 函数ListentFunctionObject、propertyName、回调{ var oldProperty=对象[propertyName]; 如果typeof oldProperty!==函数抛出错误`object.${propertyName}不是函数`; Object.definePropertyobject,propertyName{ 值:函数{ var params=[].slice.callarguments; var结果=oldProperty.applyobject,参数; callBackobject、propertyName、params、result; 返回结果; } }; } console.logmodule.getX;//不会触发 ListentFunctionModule、getX、functionobject、propertyName、params、result{ log`对对象${JSON.stringifyobject}调用了函数${propertyName},参数为${JSON.stringifyparams}。结果为${JSON.stringifyresult}`; }; console.logmodule.getX;//将触发
console.logmodule.getX1,2,3;//will trigger我认为您可以使用prototype来获取从第三方导入的代码。

只需覆盖该函数,并在when\u getX\u isExecuted函数中添加一个调用即可。这里有一个例子。希望能有帮助

执行_getX_时的函数{ console.log'getX已执行'; } 变量模块={ x:42, getX:函数{ 归还这个.x; } } //重写函数getX module.getX=函数{ 当执行时; 归还这个.x; } //通过调用getX进行测试 var x=module.getX;
console.log xWrap函数并重新分配属性?丑陋版本:module.getX=>{const getXCache=module.getX;return…args=>{/*此处的任何内容*/getXCache…args};};,否则,例如,查看@ASDFGerte,这不会以一个无休止的循环结束吗?您可以简单地添加returnthis.x,而不是召回getX@wayneOS当你发表评论时,我已经把结尾搞糟了,并且已经编辑好了。在阅读答案时,我还注意到我忘记了使用.call而不是直接调用,这就失去了正确的含义。但是,哦,好吧,这是一个表明总体想法的评论:@Slake我发布了我的答案。你自己看看吧
var module = {
  x: 42,
  getX: function() {
    return this.x;
  }
}
when_getX_isExecuted function() {
    console.log('getX was executed');
}