MicrosoftAJAX实现Javascript面向对象之接口详解
接口
接口用于定义实现它的类的输入和输出要求。 这样,函数可以和实现同一接口的类进行交互,而不用考虑该类还实现哪些其他功能。
Microsoft AJAX Library Type 方法支持接口。 调用 registerClass 方法时,通过在 interfaceTypes 参数中指定一个已注册的接口,可以实现一个接口。
实现接口
使用 Type类的registerInterface 方法可注册构造函数所定义的接口。
代码如下 | |
var interfaceVar = typeInstanceVar.registerInterface(typeName) |
通过 Type类的registerClass 方法,可以按照构造函数的定义,使用可选基类和接口类型注册一个类。 registerClass 方法的调用在定义类之后、实例化类之前进行。 registerClass 方法是从类直接调用的。
代码如下 | |
classInstanceVar.registerClass(typeName, baseType, interfaceTypes) |
Type 类的方法支持实现接口。 在注册类时,通过在 registerInterface 方法的 interfaceTypes 参数中指定已注册接口来实现接口。
接口不应实现任何成员,因为实现该接口的任何类必须覆盖这些成员
下面的示例演示如何创建实现接口的派生类。 代码通过在 baseType 参数中指定的基类以及在 interfaceTypes 参数中指定的接口来调用 registerClass 方法。 通过从派生类的构造函数中调用 initializeBase,在给定实例的上下文中初始化基类。 然后,调用 implementsInterface 方法以确定类实例的接口。
代码如下 | |
// Register classes to test. Samples.A = function() { } Samples.B = function() { } Samples.C = function() { } var isDerived; // Output: "false". var implementsInterface // Output: "true". |
要点
接口
与类的定义方法大致相同
构造函数抛出异常
所有的方法抛出异常(只有方法签名,不提供实现)
注册接口时使用registerInterface方法
接口无法继承其他接口
接口定义
代码如下 | |
MyNamespace.IMyInterface=function(){throw Error.notImplemented()} MyNamespace.IMyInterface.prototype={myMethod:function(){throw Error.notImplemented()}} MyNamespace.IMyInterface.registerInterface(“MyNamespace.IMyInterface”); |
接口实现
在使用registerClass方法注册类时候可以传入额外的参数来实现接口
代码如下 | |
MyNamespace.MyClass.registerClass("MyNamespace.MyClass",null,IMyInterface1,IMyInterface1,…); |
示例
代码如下 | |
<!DOCTYPE HTML> jweaving.tutorials.TextBlock = function(name, text) { jweaving.tutorials.TextBlock.prototype = { jweaving.tutorials.TextBlock.registerClass('jweaving.tutorials.TextBlock'); jweaving.tutorials.Button = function(name, text) { jweaving.tutorials.Button.prototype = { jweaving.tutorials.Button.registerClass('jweaving.tutorials.Button'); jweaving.tutorials.IAction = function() { jweaving.tutorials.IAction.Prototype = { jweaving.tutorials.IAction.registerInterface('jweaving.tutorials.IAction'); jweaving.tutorials.StyleButton = function(name, text, style) { this._style = style; jweaving.tutorials.StyleButton.prototype = { jweaving.tutorials.StyleButton.registerClass('jweaving.tutorials.StyleButton', jweaving.tutorials.Button, jweaving.tutorials.IAction); jweaving.tutorials.ColorButton = function(name, text, style, color) { this._color = color; jweaving.tutorials.ColorButton.prototype = { jweaving.tutorials.ColorButton.registerClass('jweaving.tutorials.ColorButton', jweaving.tutorials.StyleButton); </script> var button2 = new jweaving.tutorials.StyleButton('button2', '样式按钮', 'bold'); var button3 = new jweaving.tutorials.ColorButton('button3', '颜色按钮', 'bold', 'Red'); var textBlock1 = new jweaving.tutorials.TextBlock('textBlock1', 'Hello World!'); textBlock1.write(); button2.execute(textBlock1); button3.execute(textBlock1); function processButton(button) { |