前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >闭包方式实现函数重载

闭包方式实现函数重载

作者头像
星辉
发布2019-01-15 10:28:30
5150
发布2019-01-15 10:28:30
举报

闭包方式实现函数重载

目录

  • 实例代码
  • 代码解析

实例代码

代码语言:javascript
复制
<script>
// 重载所需函数
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 people = {
  values: ["Dean Edwards", "Alex Russell", "Dean Tom"]
};
 
// 不传参数时,返回peopld.values里面的所有元素
addMethod(people, "find", function() {
  return this.values;
});

// 传一个参数时,按first-name的匹配进行返回
addMethod(people, "find", function(firstName) {
  var ret = [];
  for(var i = 0; i < this.values.length; i++) {
    if(this.values[i].indexOf(firstName) === 0) {
      ret.push(this.values[i]);
    }
  }
  return ret;
});
 
// 传两个参数时,返回first-name和last-name都匹配的元素
addMethod(people, "find", function(firstName, lastName) {
  var ret = [];
  for(var i = 0; i < this.values.length; i++) {
    if(this.values[i] === (firstName + " " + lastName)) {
      ret.push(this.values[i]);
    }
  }
  return ret;
});
 
// 测试:
console.log(people.find()); //["Dean Edwards", "Alex Russell", "Dean Tom"]
console.log(people.find("Dean")); //["Dean Edwards", "Dean Tom"]
console.log(people.find("Dean Edwards")); //["Dean Edwards"]
</script>

实例

对象的方法

object[name] 等于 object.name,此时name可以为变量,而后者不可为变量,name即为属性名

apply方法

Function.apply(obj,args), obj代替Function类里this对象,args数组,将作为参数传给Function

fn.length

获取方法的形参值

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年10月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 闭包方式实现函数重载
    • 目录
      • 实例代码
        • 实例
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档