![](/img/trans.png)
[英]Extending existing Object to add additional JavaScript Prototype methods
[英]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.prototype
的open
函數作為參數傳遞。 是的,它正在傳遞實際的函數本身; 函數可以像值一樣傳遞。
因此,在該IIFE(立即調用的函數表達式)內部, open
是XMLHttpRequest.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.