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

 

千百度
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容