众所周知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
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
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框架
