zoukankan      html  css  js  c++  java
  • 《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节的文字呢,还是说这只是一种表述方式,可以帮助读者理解?可是,用能运行的示例不是更好吗?

  • 相关阅读:
    2017寒假作业二 汇总随笔
    2017寒假作业一
    UVA 1601 POJ 3523 The Morning after Halloween 【双向BFS】【A*】 (好题)
    UVA 10570 Meeting with Aliens 【枚举+结论题】
    UVA 1614 Hell on the Markets 【贪心+结论题】
    UVA 10603 Fill【BFS】
    Codevs 1288 埃及分数 【IDA*】
    UVA 11212 Editing a Book 【IDA*】
    UVA 11624 Fire! 【特殊BFS】
    UVA 1599 Ideal Path 【两次BFS+贪心】 (好题)
  • 原文地址:https://www.cnblogs.com/wangking/p/7799589.html
Copyright © 2011-2022 走看看