最近在读javascript忍者 感受下jquery作者 john Resig对于js的独到见解。

先上代码:

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);
};
}
} var ninjas = {values:["dean Edwards","sam Stephenson", "Alex Russell"]};
addMethod(ninjas,"find",function(){
return this.values;
});
addMethod(ninjas,"find",function(name){
var ret = [];
for(var i=0; i<this.values.length;i++){
if(this.values[i].indexOf(name) == 0){
ret.push(this.values[i]);
}
}
return ret;
})
addMethod(ninjas,"find",function(fname,lname){
var ret = [];
for(var i=0;i<this.values.length;i++){
if(this.values[i] == fname + ' ' + lname){
ret.push(this.values[i]);
}
}
return ret;
})
console.log(ninjas.find());
console.log(ninjas.find("Alex"));
console.log(ninjas.find("dean","Edwards"));

javascript 函数重载另一种实现办法的更多相关文章

  1. [转载]浅谈JavaScript函数重载

     原文地址:浅谈JavaScript函数重载 作者:ChessZhang 上个星期四下午,接到了网易的视频面试(前端实习生第二轮技术面试).面了一个多小时,自我感觉面试得很糟糕的,因为问到的很多问题都 ...

  2. javascript 函数重载 overloading

    函数重载 https://en.wikipedia.org/wiki/Function_overloading In some programming languages, function over ...

  3. JavaScript函数重载

    译者按: jQuery之父John Resig巧妙地利用了闭包,实现了JavaScript函数重载. 原文: JavaScript Method Overloading 译者: Fundebug 为了 ...

  4. C++函数重载的4种错误示例

    函数重载的4种错误示例: #include <iostream> #include <string> using namespace std; //函数重载 同函数名,函数重载 ...

  5. 浅谈JavaScript函数重载

    上个星期四下午,接到了网易的视频面试(前端实习生第二轮技术面试).面了一个多小时,自我感觉面试得很糟糕的,因为问到的很多问题都很难,根本回答不上来.不过那天晚上,还是很惊喜的接到了HR面电话.现在HR ...

  6. Javascript函数重载,存在呢—还是存在呢?

    1.What's is 函数重载? );//Here is int 10 print("ten");//Here is string ten } 可以发现在C++中会根据参数的类型 ...

  7. javascript arguments与javascript函数重载

    1.所 有的函数都有属于自己的一个arguments对象,它包括了函所要调用的参数.他不是一个数组,如果用typeof arguments,返回的是’object’.虽然我们可以用调用数据的方法来调用 ...

  8. JavaScript “函数重载”

    函数重载(function overloading)必须依赖两件事情:判断传入参数数量的能力和判断传入参数类型的能力. JavaScript的每个函数都带有一个仅在这个函数范围内作用的变量argume ...

  9. javascript函数命名的三种方式及区别

    1, function fn(val1,val2) { alert(val1+val2); } fn(1,2); 2, var fn=function() { alert(val1+val2); } ...

随机推荐

  1. ASP.NET 验证控件报错:WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping。

    在Visual Studio 2012中添加并使用验证控件时,可能会遇到如下的错误: WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResour ...

  2. MySQL Innodb表空间不足的处理方法

    官方给出的解决方案: 添加和删除 InnoDB 数据和日志文件 这一节描述在InnoDB表空间耗尽空间之时,或者你想要改变日志文件大小之时,你可以做的一些事情. 最简单的,增加InnoDB表空间大小的 ...

  3. ubuntu 16.04 + 中文输入法

    在桌面右上角设置图标中找到"System Setting",双击打开. 在打开的窗口里找到"Language Support",双击打开. 可能打开会说没有安装 ...

  4. CentOs 6.5设置使用私钥登录关闭ssh的密码登录修改ssh默认端口

    使用SecureCRT工具创建RSA公钥和私钥 [选项]=>[会话选项] 然后在弹出对话框中选择[公钥]然后点击[属性]: 在弹出窗口中选中[使用会话公钥设置],点击[创建身份文件]按钮: 然后 ...

  5. centOS下lnamp安装

    首先安装apache,mysql ,最后安装php 1>apache安装 安装:yum install -y httpd 运行:/bin/systemctl start httpd.servic ...

  6. $GLOBALS['HTTP_RAW_POST_DATA']与$_POST的区别

    $HTTP_RAW_POST_DATA   The RAW / uninterpreted HTTP POst information can be accessed with:   $GLOBALS ...

  7. kali添加更新源

    /etc/apt/sources.list 具体方法参考: http://blog.csdn.net/gmnet/article/details/14471835 http://blog.sina.c ...

  8. java实现可安装的exe程序

    java实现可安装的exe程序 通过编写Java代码,实现可安装的exe文件的一般思路: 1.在eclipse中创建java项目,然后编写Java代码,将编写好的Java项目导出一个.jar格式的ja ...

  9. 【python】python环境搭建

    本文主要用于记录python环境的搭建一些不常用的命令,其他的安装步骤在其他大师可以找到就不详细列出了.(注:以下操作都是在Ubuntu14.04LTS版本) 一.环境查询相关 1.查询当前pytho ...

  10. php 计算当天凌晨时间戳 以及获取其他常用时间戳

    php 计算当日凌晨时间戳 以及获取其他常用时间戳(持续补充中...) 获取当天凌晨时间戳: echo strtotime(date('Y-m-d')); 以下再列举一些获取其他常用时间戳的方法 获取 ...