此代码伪装为覆盖函数print('this is Python stuff', 5+10)
!. path/to/testAllLatin.sh
print('is it all latin?')
,该函数已经在helper.highlight
之前作为参数传递给字符串。覆盖之后,应该将###
附加到字符串中。
这里有一个重要的细节,那就是该函数的新实现(重写)需要利用原始实现。
###
该代码可以正常运行,如您在此处看到的那样:
https://codesandbox.io/s/2o503978m0
我想知道的是::是否可以在不使用其他变量的情况下完成函数覆盖,例如:<html>
<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script>
window.addEventListener('load', function(){
let output = document.querySelector('.message');
let result = helper.highlight('Hello World');
output.innerHTML = result;
});
helper = {
highlight: str => {
return '### ' + str;
}
};
// BEGIN OF YOUR APPROACH
prevHighlight = helper.highlight;
helper.highlight = str => {
str += ' ###';
str = prevHighlight(str);
return str;
};
// END OF YOUR APPROACH
</script>
</head>
<body>
<span class="message"></span>
</body>
</html>
。寻找一种更清晰的方法来实现这一点。
有什么想法吗?
请尽可能在上方插入我的prevHighlight
并将新链接粘贴到您的答案上。
谢谢!
答案 0 :(得分:0)
这种方法装饰了原始功能:
Function.prototype.affixer = function() {
var originalHighlight = this;
var temp = function() {
// this is not very robust and assumes there is always at least one argument
arguments[0] += " ###";
return originalHighlight.apply(this, arguments);
};
return temp;
};
helper.highlight = helper.highlight.affixer();
在此处查看分叉的示例:https://codesandbox.io/s/726xw524z0
答案 1 :(得分:0)
我认为这是不可能的。看看这个:
helper.highlight = str => {
str += ' ###';
str = helper.highlight(str);//prevHighlight(str);
return str;
};
如您所见,highlight
将以这种方式递归。