我看到另一个带有类似问题的线程,但window.alert被证明不是本机函数。这就是我想要做的事情:
var byId = document.getElementById
document.getElementById = function(id){
if(id == "some id"){
//do stuff here
}
return byId(id);
}
除了byId只是指向document.getElementById
的链接,因此当我更改document.getElementById
时,调用byId()
只是调用新的document.getElementById
答案 0 :(得分:1)
据我所知,重写功能无法正常工作。当您将函数的引用分配给byId
时,它会丢失其上下文。您需要通过document
将byId
作为byId.call(document, id)
函数的上下文传递。
var byId = document.getElementById;
document.getElementById = function(id){
if(id === "second"){
console.log('Second found');
}
return byId.call(document, id);
}
document.getElementById('first').innerHTML = 'First changed !!!';
document.getElementById('second').innerHTML = 'Second changed !!!';
<p id='first'>First</p>
<p id='second'>Second</p>