JS如何实现重载和多态

多态和重载的区别

重载:

重载可认为是静态的多态,静态联编,发生在编译阶段;

重载就是一组具有相同名字、不同参数列表的函数(方法)。

重载,函数特征之一,表现为在一个类中同名不同参的方法分别被调用会产生不同的结果。

多态:

多态是动态的,动态联编,发生在运行阶段;

多态,面向对象特征之一,表现为不同对象调用相同方法会产生不同的结果。可以理解一个方法被不同实现后 展现不同的效果及状态。

静态的比动态的效率高,但动态的最大优点是多态性,提高代码复用性。


js中实现重载

一、根据arguments个数实现重载

js本身不支持重载,所以只能通过其他方式实现,arguments检测传参的个数,然后再执行不同的方式

function add() {
        var sum = 0 ;
        for ( var i = 0 ; i < arguments.length; i ++ ) {
            sum += arguments[i];
        }
        return sum;
    }
    alert(add());
    alert(add( 1 , 2 ));
    alert(add( 1 , 2 , 3 ));

function overLoading() {
  // 根据arguments.length,对不同的值进行不同的操作
  switch(arguments.length) {
    case 0:
      /*操作1的代码写在这里*/
      break;
    case 1:
      /*操作2的代码写在这里*/
      break;
    case 2:
      /*操作3的代码写在这里*/
       
  //后面还有很多的case......
}
 
}

二、检测数据类型实现重载

根据传参的类型,调用不同的方法,用typeof进行检测

//检测数据类型实现重载 typeof
    var MyClass=function(){
        var AddNum=function(a,b){
            return a+b;
        }
        var AddString=function(a,b){
            return "I am here"+a+b;
        }
        this.Add=function(a,b){
            if(typeof(a)=="number")
                return AddNum(a,b);
            else
                return AddString(a,b);
        }
    }

    function add(a,b){
        return a+b;
    }

    function add(a,b){
        return "I am here"+a+b;
    }

    var MyObj = new MyClass();
    var X = MyObj.Add(5,6);
    var Y = MyObj.Add("A","FFFFFF");
    alert(X); //结果:11
    alert(Y); //结果:I am hereAFFFFFF

三、jquery中的重载

如果传递2个参数表示获取值,传递三个参数表示赋值

function attr(id, key, value){
        var dom =  $$.$id(id);
        var args = arguments.length;
        if(args ===3 ){
            dom.setAttribute(key, value);
        }else{
            return dom.getAttribute(key);
        }
    }
attr(1,2);
attr(1,2,3);

js中实现多态

非多态代码示例

var makeSound = function(animal) {
    if(animal instanceof Duck) {
        console.log('嘎嘎嘎');
    } else if (animal instanceof Chicken) {
        console.log('咯咯咯');
    }
}
var Duck = function(){}
var Chiken = function() {};
makeSound(new Chicken());
makeSound(new Duck());

多态的代码示例

var makeSound = function(animal) {
    animal.sound();
}

var Duck = function(){}
Duck.prototype.sound = function() {
    console.log('嘎嘎嘎')
}
var Chiken = function() {};
Chiken.prototype.sound = function() {
    console.log('咯咯咯')
}

makeSound(new Chicken());
makeSound(new Duck());

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值