《JavaScript语言精粹》读书笔记——给类型增加方法一节的疑问

Posted 我爱吃小丸子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《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节的文字呢,还是说这只是一种表述方式,可以帮助读者理解?可是,用能运行的示例不是更好吗?

以上是关于《JavaScript语言精粹》读书笔记——给类型增加方法一节的疑问的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript语言精粹读书笔记 - JavaScript函数

JavaScript语言精粹学习笔记

JavaScript语言精粹笔记

读《JavaScript语言精粹》笔记

《NoSQL精粹》读书笔记

《NoSQL精粹》读书笔记