zoukankan      html  css  js  c++  java
  • 实现js中的重载

    重载是面向对象语言里很重要的一个特性,JS中没有真正的重载,是模拟出来的(因为js是基于对象的编程语言,不是纯面向对象的,它没有真正的多态:如继承、重载、重写)

    一、什么时候用重载?

    举例:

    function getDataTop10(){
        alert("返回前10条数据");
    }
    

    后来需求改了,需要获得20条数据,而getDataTop10又被很多函数调用了,整体替换可以但麻烦,这时可以用重载

    进而引出什么是重载:函数名相同,但是可以区分出来,想用哪个就用哪个,而不是后面的同名函数覆盖前面的

    二、怎么用?

    arguments:Js里的一个内置对象,包含了调用者传递的实际参数(函数声明时定义的参数个数不影响)

    function getData(){
        alert("返回所有数据");
    }
    function getDataTop(num){
        alert("返回前"+num+"数据");
    }
    function getDataLimit(num1,num2){
        alert("返回前"+num1+"-"+num2+"数据");
    }
    function getDste(){
        var num=arguments.length;
        if(!num){
    	getData();
        }
        else if(num==1){
    	getDataTop(arguments[0]);
        }
        else if(num==2){
    	getDataLimit(arguments[0],arguments[1]);
        }
    }
    getDste(5)
    

     当参数很多时要写一大串,遂可以改进

    function getData(){
        alert("返回所有数据");
    }
    function getDataTop(num){
        alert("返回前"+num+"数据");
    }
    function getDataLimit(num1,num2){
        alert("返回前"+num1+"-"+num2+"数据");
    }
    function getDste(){
    	var num=arguments.length;
    	if(!num){
    	    getData();
    	}
    	else if(num==1){
    	    getDataTop.apply(this,arguments);
    	}
    	else if(num==2){
    	    getDataLimit.apply(this,arguments);
    	}
    }
    getDste(5)
    

     如果参数个数相同,类型不同,又该如何

    function getData(){
        alert("返回所有数据");
    }
    function getDataTop(num){
        alert("返回前"+num+"数据");
    }
    function getDataLimit(num1,num2){
        alert("返回前"+num1+"-"+num2+"数据");
    }
    function getDataByType(type){
        alert("将返回"+type+"类型的数据");
    }
    function getDste(){
        var num=arguments.length;
        if(!num){
    	getData();
        }
        else if(num==1){
    	if(typeof arguments[0]=="number"){
                getDataTop.apply(this,arguments);
    	}
    	else{
    	    getDataByType.apply(this,arguments);
    	}
        }
        else if(num==2){
    	getDataLimit.apply(this,arguments);
        }
    }
    getDste("array")
    

    三、好处

    有利于合作开发

    四、坏处

    “实现”太勉强,如果参数过多,就要很多if语句,显得代码很乱

  • 相关阅读:
    AFHTTPRequestOperationManager网络请求的时候添加一个菊花,requestmapping
    媒体层图形技术之Core Animation 学习笔记
    PHP自动判断字符集并转码
    用PHP实现游戏中的一些常见功能
    从几个简单的程序看PHP的垃圾回收机制
    递归遍历PHP多维数组
    CodeIgniter的缓存机制与使用方法
    PHP的内存泄露问题与垃圾回收
    记录一下PHP数组数据分页的方法
    PHP正则表达式移除超链接文本
  • 原文地址:https://www.cnblogs.com/zhangwenkan/p/3954050.html
Copyright © 2011-2022 走看看