• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
XPP的Blog
博客园    首页    新随笔    联系   管理    订阅  订阅

Asp.Net ajax 面向对象类型系统

直接贴代码了。。

//注册命名空间
Type.registerNamespace("MyNamespace");

//----枚举定义开始,构造函数
MyNamespace.EmployeeType = function()
{
    throw Error.notImploemented();
}

//枚举成员
MyNamespace.EmployeeType.prototype = 
{
    Intern : 0,
    Vendor : 1,
    FulltimeEmployee : 2
}
//注册枚举
MyNamespace.EmployeeType.registerEnum("MyNamespace.EmployeeType");
//----枚举定义结束


//接口定义开始,构造函数
MyNamespace.IEmployee = function()
{
    throw Error.notImplemented();
}
//接口成员
MyNamespace.IEmployee.prototype =
{
    calcaulateSalary: function()
    {
        throw Error.notImplemented();
    },

    get_type: function()
    {
        throw Error.notImplemented();
    }
}
//注册接口
MyNamespace.IEmployee.registerInterface("MyNamespace.IEmployee");
//接口定义结束


//抽象父类定义,构造函数
MyNamespace.Employee = function(name)
{
    this._name = name ? name : "(Anonymous)";
    this._year = 0;
}

//类成员定义(属性,方法) 
MyNamespace.Employee.prototype =
{
    //定义只读属性
    get_name: function()
    {
        return this._name;
    },

    //可读可写属性
    get_year: function()
    {
        return this._year;
    },
    set_year: function(value)
    {
        this._year = value;
    },

    //有未实现的方法的成员,说明这是抽象父类
    calculateSalary: function()
    {
        throw Error.notImplemented();        
    },

    getDescription: function()
    {
        return String.format(
            "{0} gets {1} yuan per month.",
            this._name,
            this.calculateSalary());
    }
}
//注册类型,第二个参数说明其没有父类,第三个参数说明实现IEmployee接口
MyNamespace.Employee.registerClass("MyNamespace.Employee", null,MyNamespace.IEmployee);

//子类开始
//Child Class 1
MyNamespace.Intern = function(name)
{
    //此处说明继承父类
    MyNamespace.Intern.initializeBase(this, [name]);
}

//子类方法
MyNamespace.Intern.prototype =
{
    //重写父类抽象方法
    calculateSalary: function()
    {
        return 2000;
    },
    
    getDescription: function()
    {
        //此处调用父类方法
        var description =MyNamespace.Intern.callBaseMethod(this,"getDescription");
        return description + "What a poor intern";
    },
    
    //此处实现接口
    get_type : function()
    {
        return MyNamespace.EmployeeType.Intern;
    }
}

//注册子类,第二个参数标明其父类
MyNamespace.Intern.registerClass("MyNamespace.Intern", MyNamespace.Employee);

//Child Class 2
MyNamespace.Vendor = function(name)
{
    MyNamespace.Vendor.initializeBase(this, [name]);
}

MyNamespace.Vendor.prototype =
{
    calculateSalary: function()
    {
        return 5000 + 1000 * (this.get_year()-1);
    },
    
    get_type : function()
    {
        return MyNamespace.EmployeeType.Vendor;
    }
}

MyNamespace.Vendor.registerClass("MyNamespace.Vendor", MyNamespace.Employee);

//Child Class 3
MyNamespace.FulltimeEmployee = function(name)
{
    MyNamespace.FulltimeEmployee.initializeBase(this, [name]);
}

MyNamespace.FulltimeEmployee.prototype =
{
    calculateSalary: function()
    {
        return 15000 + 2000 * (this.get_year() - 1);
    },

    get_type: function()
    {
        return MyNamespace.EmployeeType.FulltimeEmployee;
    }
}

MyNamespace.FulltimeEmployee.registerClass("MyNamespace.FulltimeEmployee", MyNamespace.Employee);

///////////////////////////////////////
//具有标记的枚举
MyNamespace.MyFlags = function()
{
    throw Error.notImplemented();
}
MyNamespace.MyFlags.prototype =
{
    Item1: 1,
    Item2: 2,
    Item3: 4,
    None: 0,
    All: 7
}
//注册枚举,第二个参数说明其可标记
MyNamespace.MyFlags.registerEnum("MyNamespace.MyFlags", true);

posted @ 2009-12-27 19:13  Peter_xpp  阅读(148)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3