克隆原生js功能

时间:2017-09-21 20:39:45

标签: javascript

我看到另一个带有类似问题的线程,但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

1 个答案:

答案 0 :(得分:1)

据我所知,重写功能无法正常工作。当您将函数的引用分配给byId时,它会丢失其上下文。您需要通过documentbyId作为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>