<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<title>chap07</title>
<script>
function make_a_matcher(){
return /a/gi;
}
var x = make_a_matcher();
var y = make_a_matcher();
x.lastIndex = 10;
document.writeln('<div>x.global : '+x.global+'<div>');
document.writeln('<div>x.ignoreCase : '+x.ignoreCase+'<div>');
document.writeln('<div>x.lastIndex : '+x.lastIndex+'<div>');
document.writeln('<div>x.multiline : '+x.multiline+'<div>');
document.writeln('<div>x.source : '+x.source+'<div>');
document.writeln('<div>y.global : '+y.global+'<div>');
document.writeln('<div>y.ignoreCase : '+y.ignoreCase+'<div>');
document.writeln('<div>y.lastIndex : '+y.lastIndex+'<div>');
document.writeln('<div>y.multiline : '+y.multiline+'<div>');
document.writeln('<div>y.source : '+y.source+'<div>');
</script>
</head>
<body>
</body>
</html>
我正在通过 Douglas Crockford 编写的“JavaScript The Good Parts”学习 JavaScript。 他描述了由正则表达式文字构成的 RegExp 对象共享一个实例和以上示例。
书中的结果是y.lastIndex : 10
。但我的结果是 y.lastIndex : 0
。
如果您能告诉我造成这种不同结果的确切原因,我将不胜感激。
最佳答案
Crockford 的信息不正确(或不是最新的),任何简单的测试都将验证您每次调用您的函数时是否获得了一个新的和不同的对象。
如果你想让它们返回同一个对象,你可以这样做:
var make_a_matcher = (function() {
var regex = /a/gi;
return function() {
return regex;
}
})();
关于javascript - 由正则表达式文字创建的 RegExp 对象共享一个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20231637/