《JavaScript语言精粹》读书笔记——给类型增加方法一节的疑问
最近,在学习《JavaScript语言精粹》这本书,发现译者虽然有很好地翻译文章,却没有对文中有疑问的地方进行改正或加以注释。我接触JavaScript只有一年左右,可能无法很好的理解这门语言,而今天,读到第四章中4.7节——给类型增加方法时遇到了疑问之处:
文中给出了对类型增加方法的示例:
Function.prototype.method = function (name, func) {
this.prototype[name] = func;
return this;
};
这里的示例似乎像是一个”公式“,而接下来的两个具体例子给读者显示了另一种写法:
Number.method('integer', function() { //提取数字中的整数部分
return Math[this < 0 ? 'ceiling' : 'floor' ](this);
});
document.writeln((10/3).integer()); //-3
String.method('trim',function() { //移除字符串末端空白
return this.replace(/^/s+|/s+$/g, '');
});
document.writeln('"" + " neat ".trim() + '"');
好吧,我姑且认为这种写法也是可以的。但是,当我把上面两个示例在FireFox中运行时却报”Number.method is not a function“错误,难道这个写法不对?我又用第一种方式重写这两个方法,确得到了”missing formal parameter“错误,我在这里糊涂了,于是在网上google了一下,发现多数有此错误的问题都是因为他们在function的参数里用了var,这和我这里的情况大相径庭,我只好搜索”JavaScript 给类型增加方法“,发现别人都是用以下写法:
Function.prototype.method=function() { func; return this }
另外,我发现Math中根本没有ceiling方法,这里可能是作者的笔误吧。将上面的方法改写成:
Number.prototype.integer=function(){
return Math[this < 0 ? 'ceil' : 'floor'](this);
};
String.prototype.trim=function(){
return this.replace(/^/S+|/s$/g,'');
};
终于,结果正确了,但我却糊涂了,为什么书中要用不能运行的示例来解释4.7节的文字呢,还是说这只是一种表述方式,可以帮助读者理解?可是,用能运行的示例不是更好吗?