• Js中的类式继承


      类式继承对于大部分开发者来说都已经熟悉,只要有了带方法(method)的类(class)就可以把他们实例化(instantiate)为对象.

      下面就有一个简单的方法来模拟类式继承.代码清单如下:

      <script>

        //辅助函数 定义
        Function.prototype.method = function( name,func ){
            
    this.prototype[name] = func;
             
    return this;    
        }
        
        
    //实现函数
        Function.method('inherits'function(parent){
            
    //记录我们目前所在父层次的级数
            var depth = 0;
            
    //继承父对象的方法
            var proto = this.prototype = new parent();
            
            
    //特权函数
            this.method('uber'function uber(name){
                
    var func;
                
    var ret;
                
    var v = parent.prototype;
                
    //如果我们已经在某个 'uber' 函数之内
                if(depth){
                    
    for (var i=d; i>0;i+=1) {
                        v 
    = v.constructor.prototype;
                    };
                    
    //从该prototype中或得函数
                    func = v[name];
                }
                
    else{
                    
    //从prototype获得要执行的函数
                    func = prototype[name];
                    
                    
    //如果此函数属于当前的prototype
                    if( func == this[name]){
                        
    //则改为调用父对象的prototype
                        func = v[name];
                    }
                }
                
    //记录我们在继承堆栈中所在位置的级数
                depth += 1;
                
                
    //
                ret = func.apply(this,Array.prototype.slice.apply(arguments,[1]));
                
                
    //恢复继承堆栈
                depth -= 1;
                
                
    return ret;
            });
            
    return this;
        })
        
    //只继承父对象特定函数的函数
        Function.method('swiss',function(parent){
            
    for (var i=1; i<arguments.length; i++) {
                
    var name = arguments[i];
                
    //将此方法导入this对象的prototype
                this.prototype[name] = parent.prototype[name];
            };
            
    return this;
        })
            
    function Person( name ){
            
    this.name = name;
        }
        
        
    //实现的例子
        Person.method('getName'function(){
            
    return name;
        })
        
    function  User( name, password ){
            
    this.name = name;
            
    this.password = password; 
        }
        User.inherits( Person );
    </script>

       下面重点讲解一下,上面的三个函数

      1.Function.prootype.method:它提供了一个简单的方法,把函数与构造函数的原型关联起来;之所以有效,是因为所有的构造函数本身都是函数,所以能获得"method"这个新方法;

      来自:小贺 

      2.Function.prototype.inherite: 这一函数可以提供简单的对象继承,他的代码主要围绕在任意方法中调用this.uber('methodName')为中心,并在让这个uber方法去执行他要覆盖的父对象.这是javascript继承模型中并未内建的部分.

      3. Functon.prototype.swiss:这是.method()函数的增强版,可以用于从单一父对象获取多个函数.如果用在多个父对象上就能能获得可用的多对象继承.

       

  • 相关阅读:
    SDN第三次上机作业
    团队作业——Beta冲刺
    SDN第二次上机作业
    在mpvue中使用map如何避坑
    仿一个好玩的滑动效果
    乡音
    mpvue支持小程序的分包加载
    台风🌀和口腔溃疡
    记一次cocos项目的加载速度优化
    如何用ajax下载文件
  • 原文地址:https://www.cnblogs.com/NetSos/p/1785663.html
Copyright © 2020-2023  润新知