扩展Javascript原型方法

扩展Javascript原型方法,javascript,Javascript,我很难理解这是如何保留一个函数并从本质上扩展它的 我看到(function(){})将立即调用声明的函数。我不明白什么是open参数。最后,我不明白(XMLHttpRequest.prototype.open)会发生什么。这是调用原型函数吗 (function(open) { XMLHttpRequest.prototype.open = function(method, url, async, user, pass) { open.call(this, arguments);

我很难理解这是如何保留一个函数并从本质上扩展它的

我看到
(function(){})
将立即调用声明的函数。我不明白什么是
open
参数。最后,我不明白
(XMLHttpRequest.prototype.open)
会发生什么。这是调用原型函数吗

(function(open) {
  XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {
    open.call(this, arguments);
  };
})(XMLHttpRequest.prototype.open);
function(open){..}
声明一个只接受一个参数的函数。
(..)(XMLHttpRequest.prototype.open)
正在调用此函数,并将
XMLHttpRequest.prototype
open
函数作为参数传递。是的,它传递的是实际函数本身;函数可以像值一样传递

因此,在IIFE(立即调用的函数表达式)中,
open
XMLHttpRequest.prototype.open
的原始实现

然后,在IIFE中,
XMLHttpRequest.prototype.open
被一个新函数替换。在新函数中,调用原始的
open
函数。这本身并不太令人兴奋,但它展示了如何在调用的
XMLHttpRequest.prototype.open
和执行的实际原始
open
函数之间插入自己的代码

iLife的全部考验只是保留原始
open
函数的句柄,在任何情况下都不能被其他代码覆盖,因为它是函数的本地句柄。

function(open){..}
声明了一个带一个参数的函数。
(..)(XMLHttpRequest.prototype.open)
正在调用此函数,并将
XMLHttpRequest.prototype
open
函数作为参数传递。是的,它传递的是实际函数本身;函数可以像值一样传递

因此,在IIFE(立即调用的函数表达式)中,
open
XMLHttpRequest.prototype.open
的原始实现

然后,在IIFE中,
XMLHttpRequest.prototype.open
被一个新函数替换。在新函数中,调用原始的
open
函数。这本身并不太令人兴奋,但它展示了如何在调用的
XMLHttpRequest.prototype.open
和执行的实际原始
open
函数之间插入自己的代码

iLife的全部考验只是保留原始
open
函数的句柄,在任何情况下都不能被其他代码覆盖,因为它是函数的本地句柄。

function(open){..}
声明了一个带一个参数的函数。
(..)(XMLHttpRequest.prototype.open)
正在调用此函数,并将
XMLHttpRequest.prototype
open
函数作为参数传递。是的,它传递的是实际函数本身;函数可以像值一样传递

因此,在IIFE(立即调用的函数表达式)中,
open
XMLHttpRequest.prototype.open
的原始实现

然后,在IIFE中,
XMLHttpRequest.prototype.open
被一个新函数替换。在新函数中,调用原始的
open
函数。这本身并不太令人兴奋,但它展示了如何在调用的
XMLHttpRequest.prototype.open
和执行的实际原始
open
函数之间插入自己的代码

iLife的全部考验只是保留原始
open
函数的句柄,在任何情况下都不能被其他代码覆盖,因为它是函数的本地句柄。

function(open){..}
声明了一个带一个参数的函数。
(..)(XMLHttpRequest.prototype.open)
正在调用此函数,并将
XMLHttpRequest.prototype
open
函数作为参数传递。是的,它传递的是实际函数本身;函数可以像值一样传递

因此,在IIFE(立即调用的函数表达式)中,
open
XMLHttpRequest.prototype.open
的原始实现

然后,在IIFE中,
XMLHttpRequest.prototype.open
被一个新函数替换。在新函数中,调用原始的
open
函数。这本身并不太令人兴奋,但它展示了如何在调用的
XMLHttpRequest.prototype.open
和执行的实际原始
open
函数之间插入自己的代码


iLife的整个考验就是保留原始
open
函数的句柄,该句柄在任何情况下都不能被其他代码覆盖,因为它是函数的本地句柄。

这正是该函数的复制品

//Create a XMLHttpRequest.realOpen function and store the original XMLHttpRequest.open function in it
XMLHttpRequest.prototype.realOpen = XMLHttpRequest.prototype.open;

//Change the XMLHttpRequest.open function
XMLHttpRequest.prototype.open = function(method, url, async, user, password) {

    //Do Your Code Here....

    //Call original XMLHttpRequest.open function which is now saved in XMLHttpRequest.realOpen function
    this.realOpen(method, url, async, user, password);
};

这是这个的复制品

//Create a XMLHttpRequest.realOpen function and store the original XMLHttpRequest.open function in it
XMLHttpRequest.prototype.realOpen = XMLHttpRequest.prototype.open;

//Change the XMLHttpRequest.open function
XMLHttpRequest.prototype.open = function(method, url, async, user, password) {

    //Do Your Code Here....

    //Call original XMLHttpRequest.open function which is now saved in XMLHttpRequest.realOpen function
    this.realOpen(method, url, async, user, password);
};

这是这个的复制品

//Create a XMLHttpRequest.realOpen function and store the original XMLHttpRequest.open function in it
XMLHttpRequest.prototype.realOpen = XMLHttpRequest.prototype.open;

//Change the XMLHttpRequest.open function
XMLHttpRequest.prototype.open = function(method, url, async, user, password) {

    //Do Your Code Here....

    //Call original XMLHttpRequest.open function which is now saved in XMLHttpRequest.realOpen function
    this.realOpen(method, url, async, user, password);
};

这是这个的复制品

//Create a XMLHttpRequest.realOpen function and store the original XMLHttpRequest.open function in it
XMLHttpRequest.prototype.realOpen = XMLHttpRequest.prototype.open;

//Change the XMLHttpRequest.open function
XMLHttpRequest.prototype.open = function(method, url, async, user, password) {

    //Do Your Code Here....

    //Call original XMLHttpRequest.open function which is now saved in XMLHttpRequest.realOpen function
    this.realOpen(method, url, async, user, password);
};

谢谢我仍然停留在
(函数(param){})(myParam)
。如何将
myParam
传递给函数
(function())()
这叫什么?它叫IIFE。如果这样更容易,请将它重写为
函数foo(open){..};foo(XMLHttpRequest…)。同样的,谢谢。我仍然停留在
(函数(param){})(myParam)
。如何将
myParam
传递给函数
(function())()
这叫什么?它叫IIFE。如果这样更容易,请将它重写为
函数foo(open){..};foo(XMLHttpRequest…)。同样的,谢谢。我仍然停留在
(函数(param){})(myParam)
。如何将
myParam
传递给函数
(function())()
这叫什么?这叫生活。如果这让它更容易,请重写