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()函数的增强版,可以用于从单一父对象获取多个函数.如果用在多个父对象上就能能获得可用的多对象继承.

   

你可能感兴趣的:(js)