在自我改进方面,我正在阅读(并重读)SeñorCrockford的TGP。但是,我不能理解他的深化方法的最中间部分。
...
return this.replace(...,
function (a, b) {
var r = ...
}
);
我想我理解:
? r : a;
位确定是按原样返回文本还是返回实体中相应属性的值。我根本没有得到的是a& amp; b作为function (a, b)
的参数提供。什么叫这个功能? (我知道整个事情都是自动执行的,但这对我来说并不是很清楚。我想我在问这个函数是如何被调用的?)
如果某人有兴趣通过类似于this的打击分析进行打击,我会非常感激,我怀疑其他人也可能。
以下是为方便起见的代码:
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;
}
);
};
}());
答案 0 :(得分:5)
replace
函数可以将函数作为第二个参数。
然后为每个匹配调用此函数,其签名取决于要搜索的正则表达式中的组数。如果正则表达式不包含任何捕获组,则a
将是匹配的子字符串,b
整个字符串中的数字偏移量。有关更多详细信息,请参阅MDN documentation。
答案 1 :(得分:5)
a
不是数字偏移量,而是matched substring。
b
(在本例中)是第一个分组,即匹配减去周围的&
和;
。
该方法检查以确保实体存在,并且它是一个字符串。如果是,则为替换值,否则将替换为原始值,减去&
和;