我正在尝试使用以下代码将参数传递给内置的JavaScript函数alert()。一旦我将参数传递给它,现在我想调用真正的(内置)函数,这样代码就不会中断。
built_in_alert = alert;
function alert(text)// Our custom alert function.
{
console.log('Alert function called with param :'+ text);
built_in_alert("Calling with "+text) // try to call the actual built in alert() function.
return 0;
}
alert("hi");
这段代码以某种方式进行无限递归。
答案 0 :(得分:6)
我同意Amin Jafari的说法,更换内置函数通常不是一个好主意,但可能会出现对测试或其他原因有用的情况。
也就是说,您的代码无法正常工作的原因是您的替换alert()
函数采用以下形式:
function alert( text ) { ... }
在执行相同作用域中的任何其他代码之前,处理函数声明。这有时被称为"功能提升",虽然这有点用词不当。 (该功能实际上已移动作为术语"吊装"暗示。)
在任何情况下,这都会替换内置的alert()
函数,然后将保存到built_in_alert
变量中。
请改为:
alert = function( text ) { ... }
由于您现在正在使用普通作业来替换内置alert()
,因此替换会在您预期的时间和地点发生。
在这里试试:
built_in_alert = alert;
alert = function( text ) {
console.log( 'Alert function called with param :'+ text );
built_in_alert( 'Calling with ' + text );
}
alert( 'hi' );

答案 1 :(得分:0)
最好不要为你的功能使用保留名称,但如果你真的想这样做(我再说一次是个坏主意),你必须调用实际的alert()
使用window
: DEMO
function alert(text)// Our custom alert function.
{
console.log('Alert function called with param :'+ text);
window.alert("Calling with "+text); // try to call the actual built in alert() function.
return 0;
}
alert("hi");
答案 2 :(得分:0)
你可以试试这个:
function custom_alert(text)// Our custom alert function.
{
console.log('Alert function called with param :'+ text);
window.built_in_alert("Calling with "+text);
return 0;
}
if (!window.built_in_alert) {
window.built_in_alert = alert;
window.alert = custom_alert;
}
答案 3 :(得分:-2)
嗨,你看起来像这样,
<!DOCTYPE html>
<html>
<body>
<button onclick="myFunction()">Click me</button>
<p id="demo"></p>
<script>
function myFunction() {
var text = "hello";
dynamicalert("Custom function "+text )
}
function dynamicalert(_text) {
alert(_text)
}
</script>
</body>
</html>
如果你想使用name属性,那么
警报(document.getElementsByName( “用户名”)[0]。价值);