//脚本文件Employee.js
//注册名称空间
Type.registerNamespace("MyNamespace");
//定义枚举
MyNamespace.EmployeeType = function()
{
throw Error.notImploemented();
}
//定义枚举项
MyNamespace.EmployeeType.prototype =
{
Intern : 0,
Vendor : 1,
FulltimeEmployee : 2
}
//注册枚举
MyNamespace.EmployeeType.registerEnum("MyNamespace.EmployeeType");
//定义IEmployee接口,所有的方法直接抛出异常
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");
//1,定义Employee类(因为有抽象方法,所以为抽象类)的构造方法
MyNamespace.Employee = function(name)
{
this._name = name ? name : "[Anonymous]";
this._year = 0;
}
//2,用prototype方式定义属性与方法
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());
}
}
//3,注册Employee实现了IEmployee接口
MyNamespace.Employee.registerClass("MyNamespace.Employee", null,
MyNamespace.IEmployee);
//1,定义Intern类的构造方法,它为Employee类的子类。
MyNamespace.Intern = function(name)
{
//调用父类的构造函数
MyNamespace.Intern.initializeBase(this, [name]);
}
//2,用prototype方式定义属性与方法
MyNamespace.Intern.prototype =
{
//同名方法,覆盖父类的方法
calculateSalary : function()
{
return 2000;
},
//同名方法,覆盖父类的方法
getDescription : function()
{
//调用父类的方法有三个参数(1,自己的实例,2,父类方法名,3,参数表)
var description = MyNamespace.Intern.callBaseMethod(this, "getDescription");
return description + " What a poor intern!";
},
//属性
get_type : function()
{
return MyNamespace.EmployeeType.Intern;
}
}
//3,注册Intern类,提供父类
MyNamespace.Intern.registerClass("MyNamespace.Intern", MyNamespace.Employee);
//用同样的方法定义Vendor类
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);
//用同样的方法定义FulltimeEmployee类
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);
//使用方法Employee.aspx
Type.registerNamespace("MyNamespace");
//定义枚举
MyNamespace.EmployeeType = function()
{
throw Error.notImploemented();
}
//定义枚举项
MyNamespace.EmployeeType.prototype =
{
Intern : 0,
Vendor : 1,
FulltimeEmployee : 2
}
//注册枚举
MyNamespace.EmployeeType.registerEnum("MyNamespace.EmployeeType");
//定义IEmployee接口,所有的方法直接抛出异常
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");
//1,定义Employee类(因为有抽象方法,所以为抽象类)的构造方法
MyNamespace.Employee = function(name)
{
this._name = name ? name : "[Anonymous]";
this._year = 0;
}
//2,用prototype方式定义属性与方法
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());
}
}
//3,注册Employee实现了IEmployee接口
MyNamespace.Employee.registerClass("MyNamespace.Employee", null,
MyNamespace.IEmployee);
//1,定义Intern类的构造方法,它为Employee类的子类。
MyNamespace.Intern = function(name)
{
//调用父类的构造函数
MyNamespace.Intern.initializeBase(this, [name]);
}
//2,用prototype方式定义属性与方法
MyNamespace.Intern.prototype =
{
//同名方法,覆盖父类的方法
calculateSalary : function()
{
return 2000;
},
//同名方法,覆盖父类的方法
getDescription : function()
{
//调用父类的方法有三个参数(1,自己的实例,2,父类方法名,3,参数表)
var description = MyNamespace.Intern.callBaseMethod(this, "getDescription");
return description + " What a poor intern!";
},
//属性
get_type : function()
{
return MyNamespace.EmployeeType.Intern;
}
}
//3,注册Intern类,提供父类
MyNamespace.Intern.registerClass("MyNamespace.Intern", MyNamespace.Employee);
//用同样的方法定义Vendor类
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);
//用同样的方法定义FulltimeEmployee类
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);
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Debug">
<Scripts>
<asp:ScriptReference Path="Employee.js" />
</Scripts>
</asp:ScriptManager>
<div id="info"></div>
<script language="javascript" type="text/javascript">
function display(text)
{
document.getElementById("info").innerHTML += (text + "<br />");
}
var jeffz = new MyNamespace.Intern("Jeffrey Zhao");
jeffz.set_year(3);
display(jeffz.getDescription());
var tom = new MyNamespace.Vendor("Tom");
tom.set_year(3);
display(tom.getDescription());
var jerry = new MyNamespace.FulltimeEmployee("Jerry");
jerry.set_year(5);
display(jerry.getDescription());
//反射方法
display("jeffz implements 'IEmployee' interface: " +
MyNamespace.IEmployee.isImplementedBy(jeffz));
var type = MyNamespace.EmployeeType.toString(tom.get_type());
display(String.format("{0} is a {1}.", tom.get_name(), type));
var all = MyNamespace.MyFlags.All;
display(MyNamespace.MyFlags.toString(all));
display(MyNamespace.MyFlags.parse("Item1, Item3"));
</script>
</form>
<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Debug">
<Scripts>
<asp:ScriptReference Path="Employee.js" />
</Scripts>
</asp:ScriptManager>
<div id="info"></div>
<script language="javascript" type="text/javascript">
function display(text)
{
document.getElementById("info").innerHTML += (text + "<br />");
}
var jeffz = new MyNamespace.Intern("Jeffrey Zhao");
jeffz.set_year(3);
display(jeffz.getDescription());
var tom = new MyNamespace.Vendor("Tom");
tom.set_year(3);
display(tom.getDescription());
var jerry = new MyNamespace.FulltimeEmployee("Jerry");
jerry.set_year(5);
display(jerry.getDescription());
//反射方法
display("jeffz implements 'IEmployee' interface: " +
MyNamespace.IEmployee.isImplementedBy(jeffz));
var type = MyNamespace.EmployeeType.toString(tom.get_type());
display(String.format("{0} is a {1}.", tom.get_name(), type));
var all = MyNamespace.MyFlags.All;
display(MyNamespace.MyFlags.toString(all));
display(MyNamespace.MyFlags.parse("Item1, Item3"));
</script>
</form>
浙公网安备 33010602011771号