因此,我正在阅读本书并逐字复制代码,并且我正在接受“对象不支持此属性或方法”。
var text = '<html><body bgcolor=blue><p>' + '<This is <b>BOLD<\/b>!<\/p><\/body><\/html>';
var tags = /[^<>]+|<(\/?)([A-Za-z]+)([^<>]*)>/g;
var a,i;
String.method('entityify', function () {
var character = {
'<': '<',
'>': '>',
'&': '&',
'"': '"'
};
return function() {
return this.replace( /[<>&"]/g , function(c) {
return character[c];
});
};
}());
while((a = tags.exec(text))) {
for (i = 0; i < a.length; i += 1) {
document.writeln(('// [' + i + '] ' + a[i]).entityify());
}
document.writeln();
}
//Output [0] <html>
//Output [1]
//Output [2] html
//Output [3]
//and so on through the loop.
我似乎无法让他们的榜样奏效。
**编辑 - 我发现并添加了该功能,但仍然不能正常工作。
答案 0 :(得分:1)
问题是没有String.method(...)
功能。如果您正在尝试向String类型添加新函数,请尝试以下操作:
String.prototype.entityify = (function () {
var character = {
'<':'<', '>':'>', '&':'&', '"':'"'
};
return function() {
return this.replace( /[<>&"]/g , function(c) {
return character[c];
});
};
})();
'<foo & bar>'.entityify(); // => "<foo & bar>"
虽然,如果您计划将这部分作为库的一部分,那么您应该不直接分配给String.prototype
,而不是use Object.defineProperty(...)
as illustrated here。