zoukankan      html  css  js  c++  java
  • 面向对象编程——多继承、多态

    多继承

    javascript中继承是依赖于原型prototype链实现的,只有一条原型链,所以理论上是不能实现多继承多个父类的,但是javascript是灵活的,通过一些技巧就可以实现继承多个对象的属性来类似的实现多继承。
    下面是一个实现单继承的方法extend:

    //单继承 属性复制
    var extend = function(target,source){
        //遍历源对象的属性
        for(var property in source){
        //将源对象的属性复制到目标对象中
        target[property] = source[property];
        }
        //返回目标对象
        return target;
    }
    var book = {
        	name: 'js book',
        	alikebook: ["css book", 'html book']
        };
    var books = {
        	color: 'red'
        };
    extend(books, book);
    console.log(books.name);//js book
    console.log(books.alikebook);//["css book", 'html book']
    </script>
    

    extend方法的实现就是对对象中的属性的一个复制过程,同样的道理,我们也可以实现多继承:

    //多继承
    var mix = function(){
       	var i = 1,//从第二个参数起被继承的对象
       	    len = arguments.length,//获取参数长度
       	    target = arguments[0],//第一个对象为目标对象
       	    arg;//缓存参数对象
       	//遍历被继承的对象
       	for(; i < len; i++){
       		//缓存当前对象
       		arg = arguments[i];
       		//遍历被继承对象中的属性
       		for(var property in arg){
       			//复制
       			target[property] = arg[property];
       		}
       	}
       	//返回目标对象
       	return target;
    }
       var book = {
       	name: 'js book',
       	alikebook: ["css book", 'html book']
       };
       var books = {
       	color: 'red'
       };
       extend(books, book);
       console.log(books.name);//js book
       console.log(books.alikebook);//["css book", 'html book']
    

    当然,我们还可以将他绑定到原生对象Object上,这样所有的对象就可以拥有这个方法了。

      Object.prototype.mix = function(){
        	var i = 1,//从第二个参数起被继承的对象
        	    len = arguments.length,//获取参数长度
        	    target = arguments[0],//第一个对象为目标对象
        	    arg;//缓存参数对象
        	//遍历被继承的对象
        	for(; i < len; i++){
        		//缓存当前对象
        		arg = arguments[i];
        		//遍历被继承对象中的属性
        		for(var property in arg){
        			//复制
        			this[property] = arg[property];
        		}
        	}
        	//返回目标对象
        	return target;
        }
    

    多态

    多态就是同一个方法多种调用方式。在javascript中也可以实现,只不过要对传入的参数做判断以实现多种调用方式:

    //多态
    function Add(){
    	//无参数算法
    	function zero(){
    		return 10;
    	}
    	//一个参数算法
    	function one(num){
    		return 10 + num;
    	}
    	//两个参数算法
    	function two(num1, num2){
    		return num1 + num2;
    	}
    	//相加共有方法
        this.add = function(){
        	var arg = arguments,
        	    //获取参数长度
        	    len = arg.length;
    	    switch (len){
    	    	//如果没有参数
    	    	case 0:
    	    	    return zero();
    	    	case 1:
    	    	    return one(arg[0]);
    	    	case 2:
    	    	    return two(arg[0],arg[1]);
    
    	    }
        }
    }
    //实例化类
    var A = new Add();
    console.log(A.add());//10
    console.log(A.add(5));//15
    console.log(A.add(10,3));//13
  • 相关阅读:
    [APIO2016]划艇
    C# 循环的判断会进来几次
    C# 性能分析 反射 VS 配置文件 VS 预编译
    C# 性能分析 反射 VS 配置文件 VS 预编译
    AutoHotKey 用打码的快捷键
    AutoHotKey 用打码的快捷键
    C# 通过编程的方法在桌面创建回收站快捷方式
    C# 通过编程的方法在桌面创建回收站快捷方式
    C# 条件编译
    C# 条件编译
  • 原文地址:https://www.cnblogs.com/yehui-mmd/p/6488915.html
Copyright © 2011-2022 走看看