《javascript语言精粹》里4.12节函数模块里的一个例子:
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());
在firefox里一定会报错,我不知道为什么作者在给原型添加方法时要用object.method(name,func)这种形式,我把上面的例子改为:
String.prototype.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());
结果输出的是:
function () { return this.replace(/&([^&;]+);/g, function (a, b) {var r = entity[b];return typeof r === "string" ? r : a;}); }
明明返回的是个函数对象,怎么输出这么个结果?
我又试着将第8行的return function() { 和 第15行的};注释掉,然后运行得到了正确结果:<"> 。
不知道有没有高人指点一下这个程序的问题所在,还有书上表示希望利用函数作用域和闭包来使得只有deentityify方法有权访问entity这个数据对象。我不清楚如果将第8、15行注释掉,是否还能达到这个效果?另外,如果不能注释掉的话,这个程序应该怎么改?
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());
在firefox里一定会报错,我不知道为什么作者在给原型添加方法时要用object.method(name,func)这种形式,我把上面的例子改为:
String.prototype.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());
结果输出的是:
function () { return this.replace(/&([^&;]+);/g, function (a, b) {var r = entity[b];return typeof r === "string" ? r : a;}); }
明明返回的是个函数对象,怎么输出这么个结果?
我又试着将第8行的return function() { 和 第15行的};注释掉,然后运行得到了正确结果:<"> 。
不知道有没有高人指点一下这个程序的问题所在,还有书上表示希望利用函数作用域和闭包来使得只有deentityify方法有权访问entity这个数据对象。我不清楚如果将第8、15行注释掉,是否还能达到这个效果?另外,如果不能注释掉的话,这个程序应该怎么改?
解决方案 »
- extjs4.1中遇到的问题。
- 书中举的例子提示错误,求解答
- 大家给看看这个代码
- uncaught exception: Invalid dimensions for plot, width = null, height = null,高手救
- js如何取汉字字节码?
- 急急急急急急急急急急急急急急急急
- 请问下我写的一段JS,为什么有时候能执行,有时候不行?
- 怎样使<input name="ddd" value="eeeee">中的 value 不可见 ,即再页面上看不见值 eeeee
- window.open()的属性?
- 急急!!!一个简单的问题,这个正则表达式该怎么写?
- 谁帮我看看这个怎么解决!
- 怎样取iframe里一个页面中的一个div里的值?
[align=center]Function.prototype.method = function (name, func) {
this.prototype[name] = func;
return this;
};[/align]
所以后面的例子都用了bject.method(name,func)这种形式,看来我看书还是没看仔细,其实细细推敲一番就清楚了,感谢webdeveloper.com论坛上的Fang点醒了我。