您的位置:知识库 » Web前端

Js中的类式继承

作者: .小贺  来源: 博客园  发布时间: 2010-07-29 16:22  阅读: 2395 次  推荐: 0   原文链接   [收藏]  

  类式继承对于大部分开发者来说都已经熟悉,只要有了带方法(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()函数的增强版,可以用于从单一父对象获取多个函数.如果用在多个父对象上就能能获得可用的多对象继承.

 

0
0
标签:jquery js asp.net

Web前端热门文章

    Web前端最新文章

      最新新闻

        热门新闻