作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正尝试在 JavaScript 中实现(所谓的)改进。请看下面的例子:
<html>
<head>
<title>Function Override (Refinement) example</title>
<script type="text/javascript">
// original function
function oneFunc() {
document.writeln("<p> In original oneFunc() </p>");
}
var prevOneFunc = null;
if (oneFunc) {
prevOneFunc = oneFunc;
}
// redeclared function (should refine/complement the original one)
function oneFunc() {
if (prevOneFunc) {
prevOneFunc(); // should call original oneFunc(), BUT IT ISN'T
}
document.writeln("<p> In refined oneFunc() </p>");
}
oneFunc();
</script>
</head>
<body>
</body>
</html>
我的意图是有两个打印输出:
In original oneFunc()
In refined oneFunc()
但是,似乎因为在执行时 oneFunc
指的是新的/改进的函数,因此输出与预期不同。在调试器中检查我正在进入无限递归:)(是的,明白为什么)。
请解释我缺少哪些信息才能正确实现。
更新: 一些限制:我认为(不确定)我不能修改原始的 oneFunc
声明,它的声明就像上面描述的那样。我也不应该修改改进后的 oneFunc
的声明。
最佳答案
这有效:http://jsfiddle.net/maniator/gxpK8/
当你按照自己的方式去做时,你就是在定义:
prevOneFunc = function oneFunc(){...}
所以您没有分配匿名函数,因此要执行您想要执行的操作,您必须像这样声明 oneFunc
:
oneFunc = function() {
document.writeln("<p> In original oneFunc() </p>");
}
然后后面是正确的:
prevOneFunc = function(){...}
关于javascript - 如何在 JavaScript 中实现细化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6509606/
我是一名优秀的程序员,十分优秀!