簡體   English   中英

擴展Javascript原型方法

[英]Extending Javascript prototype methods

我很難理解這如何保留功能並從本質上擴展了它。

我看到(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.prototypeopen函數作為參數傳遞。 是的,它正在傳遞實際的函數本身; 函數可以像值一樣傳遞。

因此,在該IIFE(立即調用的函數表達式)內部, openXMLHttpRequest.prototype.open的原始實現。

然后,在IIFE中,將XMLHttpRequest.prototype.open替換為新函數。 在該新函數內部,將調用原始的open函數。 這本身並不太令人興奮,但是它說明了如何在調用XMLHttpRequest.prototype.open和執行實際的原始open函數之間插入自己的代碼。

使用IIFE的整個過程只是為了保留原始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);
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM