拜读js忍者修炼一书 读到关于js函数重载内容这个模块

  主要是介绍通过js的访问argument这个参数来实现js函数的重载

  通过在函数内部进行判断js argument参数的长度

  代码如下所示

var ninja = {
  whatever: function(){
    switch(arguments.length){
    case 0:
      /* do something */
    break;
    case 1:
      /* do something else */
    case 2:
      /* do yet something else */
    break;
    // and so on...
    }
  }
}

但是这种实现方式不够忍者,不够简洁

作者给了我们一种更加牛逼的实现方式,在调用的时候添加函数逻辑

var ninja = {}
addMethod(ninja, ‘whatever’, function(){/* do something */});
addMethod(ninja, ‘whatever’, function(a){/* do something else */});
addMethod(ninja, ‘whatever’, function(a,b){/* yet something else */});

现在问题的关键就在于如何实现addMethod这个函数了

//Listing 4.15 A method overloading function
function addMethod(object, name, fn){
  var old = object[name];
  object[name] = function(){
  if (fn.length == arguments.length)
    return fn.apply(this, arguments)
  else if (typeof old == 'function')
    return old.apply(this, arguments);
  }
}

上述代码是在针对添加方法的重载

在文章的最后感谢作者根据自己的多年开发经验写出了这么一本好书,为我的进阶之路提供了诸多指导,感谢这些大方不自私的人 惭愧

关于js 重载的更多相关文章

  1. JS 重载页面,本地刷新,返回上一页

    JS 重载页面,本地刷新,返回上一页 : <a href="javascript:history.go(-1)">返回上一页</a> <a href= ...

  2. JS重载

    Js 不支持函数的重载,可以用相同的名字在同一作用区域,定义两个函数,而不会引起错误,但真正使用的是最后一个. Js 不会验证传递给函数的参数个数是否和函数定义的参数的个数相同,开发人员定义的函数都可 ...

  3. js 重载i

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  4. js 重载(overload)

    1.js中不支持重载的语法.(因为js不允许多个同名函数存在) 解决:使用arguments类数组对象接收调用时所有传入的参数值. 2. arguments可以使用length属性,通过下标访问,不能 ...

  5. js重载的实现

    在JavaScript高级程序设计书中看到 ECMAScript函数中不能想传统意义上那样实现重载.而在其他语句中(Java)中,可以为一个函数编写两个定义,只要两个定义的签名(接受的参 数的类型和数 ...

  6. JS 重载父页面

    <script language=javascript> window.onload=function(){ //刷新父页面 window.opener.location.reload() ...

  7. js函数的伪重载

    这也是今天写东西是遇到的一个问题,导致我联想起了函数重载的问题. 在javascript中是没有函数重载机制的,对于用惯了java开发的同学可能就表示吃惊了,我屮艸芔茻,函数 没有重载?那怎么搞?!! ...

  8. js 返回前一页并刷新页面方法

    [导读] 要返回上一页再刷新页面我们用到最多的是在像php,asp,jsp,asp.net中,下面我来给大家先介绍js 返回前一页并刷新页面,然后再把这些代码放在php中实现删除后返回当前页面并刷新页 ...

  9. Javascript基础 函数“重载”

    Javascript不像其他编程语言一样具有函数签名(什么是函数签名,简单的说就是说函数的接受参数类型和参数个数,也有人认为返回类型也应该包括.具体概念大家可以到网上查询). 所以Javascript ...

随机推荐

  1. shell编程:变量替换

    定义变量:$ var_1="I love you, Do you love me" 输出变量:$ echo $var_1 打印结果:I love you, Do you love ...

  2. 数据批量导入HBase

    测试数据: datas 1001 lilei 17 13800001111 1002 lily 16 13800001112 1003 lucy 16 13800001113 1004 meimei ...

  3. Docker 容器使用

    Docker 客户端 docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项. runoob@runoob:~# docker :~# doc ...

  4. springboot整合netty,多种启动netty的方式,展现bean得多种启动方法

    首先讲解下,spring中初始化加载问题: 很多时候,我们自己写的线程池,还有bean对象,还有其他的服务类,都可以通过,相关注解进行交给spring去管理,那么我们如何让nettyserver初始化 ...

  5. 处理CSS前缀问题的神器——AutoPrefixer

    众所周知为兼容所有浏览器,有的CSS属性需要对不同的浏览器加上前缀,然而有时添加一条属性,需要添加3~4条类似的属性只是为了满足浏览器的兼容,这不仅会增加许多的工作量. What is AutoPre ...

  6. 回头看看HTML5

    前言:自从学习各种框架各种成熟的控件库,越来越觉得疲惫. 一.用语义元素构造网页 在html5中最常用到的页面结构相关的语义元素如下: 页面结构想相关的语义元素 元素 说明 <article&g ...

  7. CSS3新增(选择器{属性选择器,结构伪类选择器,伪元素选择器})

    1.属性选择器 属性选择器,可以根据元素特定的属性来选择元素,这样就不用借助 类 或者 id选择器. E [ att ]   选择具有 att 属性的 E 元素   例如:input [ value ...

  8. RK3288编译 Android 5.1 固件

    1 准备工作 编译 Android 对机器的配置要求较高: 64 位 CPU 16GB 物理内存+交换内存 30GB 空闲的磁盘空间用于构建,源码树另外占用大约 25GB Ubuntu 14.04 操 ...

  9. Hession实现远程通讯(基于Binary-RPC协议)

    一.开发工具 1.jdk1.6 64位 百度网盘地址:https://pan.baidu.com/s/1Zwqfmi20X4ANNswZzPMzXQ 提取码:k50r 2.apache-maven-3 ...

  10. webpack output.publicPath

    output.publicPath string function 对于按需加载(on-demand-load)或加载外部资源(external resources)(如图片.文件等)来说,outpu ...