是否可以绕开内置JavaScript函数

时间:2016-06-13 05:53:21

标签: javascript

我正在尝试使用以下代码将参数传递给内置的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");

这段代码以某种方式进行无限递归。

4 个答案:

答案 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]。价值);