[英]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( '<">'.deentityify( ));
您將在瀏覽器中看到:但是,如果您在瀏覽器中輸入: document.writeln( '<">');
你仍然會看到:
<">
我發現當我嘗試通過設置如下值字段來預填寫表單數據時,此方法實際上並沒有替換實體:
var venueInput = document.createElement("input");
...
venueName = '<>"'; // 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 = '<>"'; // 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 = '<>"'; // for example
實體應以“;”結尾。 你忘記了報價上的那個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.