最近在对JScript进行面向对象的扩展,使得大家以后可以在JScript(TM)中定义类,并写出真正的面向对象的代码。

我对扩展了的JScript取了名字,叫OxScript,打算实现的features如下:

OxScript is an Object-Oriented extension for JavaScript.
The following features will be provided by OxScript:
1. class definition;
2. final class;
3. abstract class;
4. inheritance;
5. overriding;
6. abstract function;
7. polymorphism;
8. package;
9. property getter/setter;
10. reflection(readonly);

大体的Specification如下:

[Access Modifiers]
public, protected, private,
static, abstract, final, virtual

[Directives]
$include, $import,
$package, $class,
$field, $method, $property, $event

[Additional Keywords]
extend, implement,
public, protected, private, static,
get, set

[Additional Operators]
classof, raise

[Predefined Classes]
class Package extend Object {
 public :
 protected :
 private :
}
class Class extend Object {
 public :
 protected :
 private :
}
class Member extend Object {
 public :
 protected :
 private :
}
class Field extend Member {
 public :
 protected :
 private :
}
class Method extend Member {
 public :
 protected :
 private :
}
class Property extend Member {
 public :
 protected :
 private :
}
class Event extend Member {
 public :
 protected :
 private :
}

[Class Hierarchy]
OxScript.Object 
     |--OxScript.Number 
     |--OxScript.String 
     |--OxScript.Boolean 
     |--OxScript.Date 
     |--OxScript.Array 
     |--OxScript.Enumerator 
     |--OxScript.Function 
     |--OxScript.RegExp 
     |--OxScript.VBArray 
     |--OxScript.Error 
     |--OxScript.ActiveXObject 
     | 
     |--OxScript.Reflection.Package 
     |--OxScript.Class 
     |--OxScript.Reflection.Member 
          |--OxScript.Reflection.Field 
          |--OxScript.Reflection.Method 
          |--OxScript.Reflection.Property 
          |--OxScript.Reflection.Event

下面是一段代码示例:

OxScript -- Object-oriented Extension for JScript(TM) (Preview)
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
// namespace declarations
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
var
OxScript -- Object-oriented Extension for JScript(TM) (Preview)LaserPackage 
= $package();
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
with(LaserPackage) {
OxScript -- Object-oriented Extension for JScript(TM) (Preview)    
// define a class named OxScriptDemo in LaserPackage
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
    $class ([public, final], OxScriptDemo, {extend : OxScript.Object},
OxScript -- Object-oriented Extension for JScript(TM) (Preview)        
// construcltor
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
        function OxScriptDemo() {
OxScript -- Object-oriented Extension for JScript(TM) (Preview)            
// this is the constructor implementation of class LaserPackage.OxScriptDemo
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
        },
OxScript -- Object-oriented Extension for JScript(TM) (Preview)        {
OxScript -- Object-oriented Extension for JScript(TM) (Preview)            
// public members
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
            public : {
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                
// a field with type of OxScript.Number
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
                field1 : $field (OxScript.Number),
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                
// a method definition
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
                method1 : $method (
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                    
function() {
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                        
// implementation of method1
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
                    }
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                ),
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                
// a property of type OxScript.String having both getter and setter
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
                property1 : $property (
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                    OxScript.String,
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                    {
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                        get : 
function() {
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                            
// getter of property1
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
                        },
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                        set : 
function() {
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                            
// setter of property1
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
                        }
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                    }
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                ),
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                
// an event declaration
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
                event1 : $event (
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                    
function(source, eventArgs) {} // the function declaration of event1 handler
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
                ),
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                
// an event handler for event1
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
                event1Handler : $method(
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                    
function(source, eventArgs) {
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                        
// implementation of event handler
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
                    }
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                ),
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                
// the method which demonstrats how to access the class members and raise events
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
                demoMethod : $method (
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                    
function() {
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                        
// assign a value to field1
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
                        this.field1 = 66;
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                        
// call method1
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
                        this.method1();
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                        
// get property1
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
                        var str = this.get_property1();
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                        
// set property1
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
                        this.set_property1(str);
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                        
// add a handler to event1
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
                        this.event1.add(this.event1Handler);
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                        
// raise event1
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
                        raise (this.event1);
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                    }
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                )
OxScript -- Object-oriented Extension for JScript(TM) (Preview)            },
OxScript -- Object-oriented Extension for JScript(TM) (Preview)            
// protected members
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
            protected : {
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                
// OxScript -- Object-oriented Extension for JScript(TM) (Preview)
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
            },
OxScript -- Object-oriented Extension for JScript(TM) (Preview)            
// private members
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
            private : {
OxScript -- Object-oriented Extension for JScript(TM) (Preview)                
// OxScript -- Object-oriented Extension for JScript(TM) (Preview)
OxScript -- Object-oriented Extension for JScript(TM) (Preview)
            }
OxScript -- Object-oriented Extension for JScript(TM) (Preview)        }
OxScript -- Object-oriented Extension for JScript(TM) (Preview)    );
OxScript -- Object-oriented Extension for JScript(TM) (Preview)}
OxScript -- Object-oriented Extension for JScript(TM) (Preview)


OxScript其实是巧妙了利用了JScript的灵活的语法和特性,对其进行了一层包装而已,所以不需要任何安装,只需要在页面中引用OxScript.js就可以享用模拟的面向对象编程了。另外OxScript还提供一个比较有用的特性就是可以反射出所类的定义信息,然后可以自动产生出类似VS中ObjectBrowser的参考窗体,罗列出当前页面中所用到的所有的类和它们的成员的定义信息,从而提供programming references来辅助脚本的编写。小弟目前正在全力的开发中(估计一个星期内就可以发布第一个版本了),先贴出设计思想和代码预览,供大家讨论和交流。请大家多提宝贵意见。

相关文章:

  • 2021-07-05
  • 2022-01-16
  • 2021-07-02
  • 2021-07-18
  • 2021-07-14
  • 2021-12-27
  • 2022-02-07
  • 2021-07-01
猜你喜欢
  • 2022-01-20
  • 2021-07-23
  • 2022-02-19
  • 2021-05-14
  • 2021-12-25
  • 2021-07-10
  • 2021-06-30
相关资源
相似解决方案