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>

it知识库Js中的类式继承,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。