求教一个 js 的问题,入门菜鸡

2021-04-28 09:34:22 +08:00
 zmz980126

大概场景就是有一段源代码,不修改它

//源代码
...
function a(){
console.log("111");
}
...
a();
console.log("333");
...
//新代码
function b(){
 console.log("222");
}

大概就是想在 a 调用完立刻调用 b 输出结果顺序为 111 222 333

扩展一步,如果是调用前能办到吗,即在执行 a 前先把 b 执行

(不知道 a 被调用了几次,但想把 b 绑定在 a 上)

可以在 b 中直接修改 a 的运行时代码吗?

感谢~

3528 次点击
所在节点    JavaScript
27 条回复
zmz980126
2021-04-29 09:13:42 +08:00
@joesonw 这么写,我有一个问题
如果 a 的调用在这段代码之前执行,这个覆盖不就执行不到吗
zmz980126
2021-04-29 09:14:44 +08:00
@gesse 是的,太高看我了,刚开始学 js
zmz980126
2021-04-29 09:16:34 +08:00
@Kasumi20 如果是是 window.a 的话,怎么做呢,拜谢~
zmz980126
2021-04-29 09:34:34 +08:00
其实最初的场景是一个课程学习网站,每过一段时间会出现一个确认框确认你是否真的在看,挺烦人,所以我就写了个油猴脚本(因为刚开始学 js 想试试),就遇到了这个问题想在它每次执行 showwarn()后执行一个 onclick 的 unshow() (当然,原来的函数名肯定不叫这个) ,最后没解决,就每隔一段时间 t 检测一下,那个改变的 html 元素,然后改变就 unshow,感觉写的很蠢
如果 t 太长,那如果出现确认框说不定也要等很长时间,如果 t 太短那就会一直执行这个检测,感觉很影响效率(且蠢)
然后就有了这个问题
xingheng
2021-04-29 13:27:55 +08:00
function decorator
oldshensheep
2021-04-29 14:54:04 +08:00
MutationObserver 可以监听 dom 的变化,然后调用你的 unshow()函数就行了
https://developer.mozilla.org/zh-CN/docs/Web/API/MutationObserver/MutationObserver
如果你一开始把你要干什么说出来大家就明白了。

如果不修改 a 的话应该不能实现你的要求。
KiZuNaYa
2021-04-29 16:20:08 +08:00
加个定时器不就好了?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/773759

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX