资讯专栏INFORMATION COLUMN

《JavaScript语言精粹》 代码摘录

haitiancoder / 2371人阅读

摘要:最近在读这本评价颇高的语言精粹,其作者是的创造者,在业界颇有名气。

最近在读这本评价颇高的《JavaScript语言精粹》,其作者Douglas Crockford 是JSON的创造者,在业界颇有名气。以下是阅读过程中认为比较有用的摘录的代码,希望能对各位有所启发

自定义的method方法
Function.prototype.method = function(name,func){//扩展Function对象,为Function对象,添加method方法,参数1是函数名字,参数2是添加的函数体
    if(!this.prototype[name]){
        this.prototype[name] = func;
    }
    return this;
}

Number.method("integer",function(){//为Number对象扩展方法integer
    return Math[this < 0 ? "ceil" : "floor"](this);//number小于0,采用Math.ceil,大于Math.floor,调用方法,传入的实参this即number本身
})

document.writeln((-10/3).integer())//-3

String.method("trim",function(){//为String对象扩展trim方法
    return this.replace(/^s+|s+$/g,"")//正则前起空格,后起空格,全局匹配
})
document.writeln("   neat    ".trim())
模块-闭包模拟

道格拉斯用闭包来实现模块- 提供接口却隐藏状态与实现的函数/对象

//deentityfy= 寻找字符串的字符实体并转换为对应的字符
String.method("deentityify",function(){
  //映射表
      var entity = {
        quot : """,
        lt   : "<",
        gt   : ">"

      };

  return function(){//返回函数携带entity
      return this.replace(/&([^&;]+);/g,function(a,b){
         //a为 匹配到的字符串,b为匹配组内
          var r = entity[b];
          return typeof r === "string" ? r : a;
        });
      };

}()//自执行,作者的目的是返回匿名函数 携带entity 的闭包
);

"<">".deentityify()
缓存(记忆)

fibonacci数列,前一种算法计算了453次,后一种算法调用了29次

//记忆
//不好的例子
var fibonacci = function(n){
    return n<2 : fibonacci(n-1) + fibonacci(n-2);
}


//好的例子
var fibonacci = function(){
    var memo = [0,1];
    var fib = function(n){
        var result = memo[n];
        if(typeof result !== "number"){
            result = fib(n-1) + fib(n-2);
            memo[n] = result;
        }
        return result;
    }
    return fib;
}();

//执行
for(var i = 0; i <= 10; i += 1){
    document.writeln("// "+i+": "+fibonacci(i));
}
//执行过的会缓存到fib闭包的memo数组里
arguments
//利用arguments实现不定参数的相加
var sum = function (){
    var i,sum = 0;
    for(i=0;i

关于对象和类的实现

这里有一些不理解

//new 关键字的实现
Function.method("new",function(){
    //创建新对象,继承自构造器的原型对象
    var that = Object.create(this.prototype)
    //调用构造器,
    var other = this.apply(that,arguments)
    return (typeof other == "object" && other) || that;
})

if(typeof Object.create !== "function"){//Object.create ESC5 引入,为不支持的实现object.create
    Object.create = function(o){
        var F = function(){};//创建新函数对象
        F.prototype = o;//设置原型
        return new F();//通过new 返回新F
    }
}
Function.method("inherits",function(Parent){
    this.prototype = new Parent();
    return this
})
递归
//利用递归实现dom遍历的方法
var walk_the_DOM = function walk(node, func){//dom 遍历
    func(node);//调用func,传入node
    node = node.firstChild;//更改node为其第一个子元素,如果没有意味着终点
    while (node) {//如果有子元素,为子元素执行walk函数本身,其node参数为之前node的第一个子元素,while循环所有子元素
        walk(node, func);
        node = node.nextSibling;//while循环此下所有子元素
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/78077.html

相关文章

  • javascript语言精粹》学习笔记 - 数组方法实现

    摘要:在中数组是经常被使用到的,我们除了要学习数组的方法,还需要了解诶一下某一些方法是如何来实现的。然而我看了语言精粹中方法的一章,想记录下书上的代码,以便加深印象。方法移除数组中的第一个元素并且放回该元素。 在js中数组是经常被使用到的,我们除了要学习数组的方法,还需要了解诶一下某一些方法是如何来实现的。然而我看了《javascript语言精粹》中方法的一章,想记录下书上的代码,以便加深印...

    felix0913 评论0 收藏0
  • javascript语言精粹

    摘要:函数调用一个函数会暂停当前函数的执行,控制权转交给新的函数。语句可以使函数提前返回,中断函数的运行。如果没有指定返回值,则返回。任何语句都会返回值,在浏览器面板执行语句后的值就是返回值。在情况下不能正常工作。 对象 对象属性的名字可以是空字符串,属性值可以是undefined(原文为属性值可以是除undefined以外的任何值,但是测试可以为undefined)。 尝试从undefi...

    mist14 评论0 收藏0
  • Javascript的内置函数(ES5)-读Javascript语言精粹

    摘要:的内置函数整理了一些语言精粹的方法一章的整理出的的内置方法之后还会整理标准入门的新添加的方法整理这些作用一方面是更好的理解记忆另一方面是对于类数组可以使用原型链的调用即可中的一些函数输出的为的结果因此的作用是连接数组当然可以是数字也会加入到 Javascript的内置函数(ES5) 整理了一些Javascript语言精粹的方法一章的整理出的ES5的内置方法; 之后还会整理ES6标准入门...

    gekylin 评论0 收藏0
  • javascript语言精粹》学习笔记 - 递归函数

    摘要:递归函数就是会直接或者间接地调用自身的一种函数。一般来说,一个递归函数调用自身去解决它的子问题。书上第二个例子是说递归函数可以非常高效率的操作树形结构,比如。有一些语言提供了尾递归的优化。好运的是,给我们带来了尾递归,详细迎接使用尾递归。 递归函数就是会直接或者间接地调用自身的一种函数。递归是一种强大的编程技术,它把一问题分解为一组相似的子问题,每一个都用一个寻常解去解决。一般来...

    Ryan_Li 评论0 收藏0
  • JavaScript 语言精粹》读书笔记 - 函数

    摘要:语言精粹读书笔记第四章函数函数字面量函数字面量包含个部分第一部分,保留字第二部分,函数名,它可以被忽略。这个超级延迟绑定使得函数对高度复用。构造器调用模式一个函数,如果创建的目的就是希望结合的前缀来调用,那它就被称为构造器构造。 《JavaScript 语言精粹》 读书笔记 第四章 函数 Functions 函数字面量 函数字面量包含4个部分: 第一部分, 保留字 function...

    wdzgege 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<