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);
浙公网安备 33010602011771号