簡體   English   中英

Crockford 在 The Good Parts 中的“deentityify”方法真的有效嗎?

[英]Does Crockford's "deentityify" method in The Good Parts actually work?

這個特定的代碼之前曾被問過兩次,但從來沒有提出過“它實際上有什么作用?”的問題。 它出現在 Crockford 的書的第 41 頁。

這是本書前面的語法糖:

Object.prototype = function (name, func){
    if(!this.prototype[name]){
    this.prototype[name] = func;
    }

這是 deentityify 方法:

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;
            }
        );
    };
}());

如果在編輯器中你寫的是這樣的:

document.writeln( '&lt;&quot;&gt;'.deentityify( ));

您將在瀏覽器中看到:但是,如果您在瀏覽器中輸入: document.writeln( '&lt;&quot;&gt;');

你仍然會看到:

<">

我發現當我嘗試通過設置如下值字段來預填寫表單數據時,此方法實際上並沒有替換實體:

 var venueInput = document.createElement("input");           
        ...
        venueName = '&lt;&gt;&quot'; // for example
        venueInput.value = venueName.deentityify();
        form.appendChild(venueName);
        form.appendChild(venueInput);

警報還顯示實體沒有被替換。

誰能幫我看看我做錯了什么? 謝謝!

在修復了您共享的代碼的一些錯誤后,它就像一個魅力:

 Object.prototype.method = function (name, func){ if(!this.prototype[name]){ this.prototype[name] = func; } } 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; } ); }; }()); var venueInput = document.createElement("input"); var label = document.createElement("label"); venueName = '&lt;&gt;&quot;'; // for example venueInput.value = venueName.deentityify(); label.innerHTML = venueName; document.getElementById('form').appendChild(label); document.getElementById('form').appendChild(venueInput);
 <div id="form"></div>

這是本書前面的語法糖

你復制錯了。 它應該是這樣的:

Function.prototype.method = function (name, func) {
    this.prototype[name] = func;
    return this;
};
 venueName = '&lt;&gt;&quot'; // for example

實體應以“;”結尾。 你忘記了報價上的那個。

暫無
暫無

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

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