簡體   English   中英

Crockford的深化方法 - The Good Parts的第41頁

[英]Crockford's deentityify method - p.41 of The Good Parts

在自我改進方面,我正在閱讀(並重讀)SeñorCrockford的TGP。 但是,我不能理解他的深化方法的最中間部分。

...
return this.replace(...,
    function (a, b) {
       var r = ...
    }
);

我想我明白了:

  1. this.replace傳遞兩個參數,正則表達式作為搜索值和生成替換值的函數;
  2. b用於訪問實體對象中的屬性;
  3. 回歸? r : a; ? r : a; bit確定是按原樣返回文本還是返回實體中相應屬性的值。

我根本沒有得到的是如何將a和b作為參數提供給function (a, b) 什么叫這個功能? (我知道整個事情都是自動執行的,但這對我來說並沒有真正清楚。我想我在問這個函數是如何被調用的?)

如果有人有興趣通過類似於的打擊分析給予打擊,我真的很感激它,我懷疑其他人也可能。

這是為方便起見的代碼:

String.method('deentityify', function ( ) {
    var entity = {
        quot: '"',
        lt: '<',
        gt: '>'
    };

    return function () {
        return this.replace(
            /&([^&;]+);/g,
            function (a, b) {
                var r = entity[b];
                return typeof r === 'string' ? r : a;
            }
        );
    };
}()); 

replace函數可以將函數作為第二個參數。

然后為每個匹配調用此函數,其簽名取決於要搜索的正則表達式中的組數。 如果正則表達式不包含任何捕獲組,則a將是匹配的子字符串, b是整個字符串中的數字偏移量。 有關更多詳細信息,請參閱MDN文檔

a不是數字偏移量,它是匹配的子字符串

b (在這種情況下)是第一個分組,即匹配減去周圍的&;

該方法檢查以確保實體存在,並且它是一個字符串。 如果是,那就是替換值,否則它被原始值替換,減去&;

暫無
暫無

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

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