0

それで、私はこの本を読み、それを手に入れるためにコードワードをコピーしました、そして私は「オブジェクトはこのプロパティまたはメソッドをサポートしていません」と得ています。

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 = {
    '<': '&lt;',
    '>': '&gt;',
    '&': '&amp;',
    '"': '&quot;'
};

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.

私は彼らの例をうまく機能させることができないようです。

**編集-関数を見つけて追加しましたが、まだ完全には機能していません。

4

1 に答える 1

1

問題は、機能がないString.method(...)ことです。文字列型に新しい関数を追加しようとしている場合は、次のことを試してください。

String.prototype.entityify = (function () {
  var character = {
    '<':'&lt;',  '>':'&gt;',  '&':'&amp;',  '"':'&quot;'
  };
  return function() {
    return this.replace( /[<>&"]/g , function(c) {
      return character[c];
    });
  };
})();

'<foo & bar>'.entityify(); // => "&lt;foo &amp; bar&gt;"

ただし、ライブラリのこの部分を作成する場合は、直接割り当てるのではなく、ここに示すように使用してください。String.prototypeObject.defineProperty(...)

于 2012-04-18T21:13:15.103 に答える