Dev.Hong
将欲取之 必先予之……
随笔- 53  文章- 0  评论- 220 
博客园  首页  新随笔  联系  管理  订阅 订阅
javascript也继承

众所周知js也是可以oo的,但实质上的实现都是利用js的特性来进行模拟的,今天就来模仿一下oo中基本的base

首先给Object添加一静态方法

 1 //提供一种通过拷贝所有目标对象属性和函数到源函数实现继承的方法( 同prototype中的 Object.extend方法作用相似,但 Object.Inherits方法在 Source 
 2 //上增加了一个 base 属性用于指向目标对象的引用
 3 //destination = 目标对象
 4 //source = 源对象
 5 Object.Inherits = function( destination, source ){
 6   source.base = destination;
 7   for (property in destination) {
 8     if ( property != 'base' )
 9         source[property] = destination[property];
10   }
11   return source;
12 }
13 


下面我们看看如何利用这个含数实现base功能

 

 1 Sys = {};
 2 
 3 Sys.Control = Class.create();
 4 Sys.Control.prototype = {
 5     initialize : function(){
 6         this.isDisposed = false;
 7     },
 8     
 9     Dispose : function(){
10         this.isDisposed = true;
11     }    
12 };
13 
14 Sys.WebControl = Class.create();
15 Sys.WebControl.prototype = Object.Inherits( new Sys.Control(), {
16 });
17 Sys.WebControl.prototype.Dispose = function(){
18     //调用基类方法
19     this.base.Dispose.call( this );
20     alert( 'Sys.WebControl is disposed' );
21 }
22 
23 //测试一下
24 Event.observe( window, 'load', function(){
25     var obj = new Sys.WebControl();
26     obj.Dispose();
27     alert( obj.isDisposed );
28 }, false );
29 

 


简单吧,唯一要注意是就是在调用基类的方法时不能用 this.base.function ,而应该写成 this.base.function.call( this ),其中原因大家都应该清楚吧

注 Class.create来自于 prototype框架

posted on 2007-03-29 16:47 Dev.Hong 阅读(158) 评论(0) 编辑 收藏
刷新评论刷新页面返回顶部
程序员问答社区,解决您的IT难题
博客园首页博问新闻闪存程序员招聘知识库
Copyright ©2012 Dev.Hong