使用Microsoft asp.net ajax客户端库创建抽象javascript类

时间:2011-10-31 12:12:42

标签: javascript interface asp.net-ajax abstract-class

注意:对于那些SO开发人员来说,MS Ajax javascript库模拟了类,接口,枚举和其他OO功能,但语言不支持它。所以不要开始吹牛,javascript中没有类。

接口实施

/// <reference path="MicrosoftAjax.debug.js" />

Type.registerNamespace("Validators");

Validators.IValidate = function () {
    throw Error.notImplemented("Interface IValidate must be implemented before invoke.");
};

Validators.IValidate.prototype = {
    ErrorMessage: "",
    IsValid: false,
    Validate: function () {
        throw Error.notImplemented("Class must provide a implementation for the method");
    }
};
Validators.IValidate.registerInterface("Validators.IValidate");

说明:

为什么我要解释与问题无关的界面?我会解释它。上面的代码将创建一个从框架中模仿IValidator的接口IValidate。这些Error.notImplemented代码的工作如下

  • 不允许他人这样做new Validators.IValidate()(即无实例
  • 当一个类实现接口时,Validate()方法将在未实现时抛出错误

所以现在您必须了解仿真的执行方式。同样我创建了一个类(实际上我想要一个抽象类,这就是我在这里的原因),这样命名为BaseValidator

Validators.BaseValidator = function () {
    throw Error.invalidOperation("Base validator is a abstract class. Inherit the class to work with it");
};

Validators.BaseValidator.prototype = {
    ValidationProperty: function (propertyName) {
    },
    BackColor: function (hexCode) {
    },
    ControlToValidate: function (id) {
    },
    CssClass: function (css) {
    },
    Display: function (mode) {
    },
    Focus: function () {
    }
};

Validators.BaseValidator.registerClass("Validators.BaseValidator", null, Validators.IValidate);

在最后一行你可以注意到它实现了Interface(但是没有提供Implementation,因为它将由BaseValidator类的子类提供)。当类实现接口时,继承构造函数应该调用Validators.BaseValidator.initializeBase(this)的另一个类,它将初始化基类。现在请仔细阅读问题

问题

Validators.RequiredFieldValidator = function () {
    Validators.RequiredFieldValidator.initializeBase(this, []);
};
Validators.RequiredFieldValidator.prototype = {};
Validators.RequiredFieldValidator.registerClass("Validators.RequiredFieldValidator", Validators.BaseValidator);
  • RequiredFieldValidator继承BaseValidator作为基类

  • 在构造函数中调用initializeBase(this)来初始化基类BUT BaseClass中的构造函数引发错误

问题

我应该如何使用Microsoft Asp.net Ajax模拟抽象类

1 个答案:

答案 0 :(得分:1)

  

在构造函数中调用initializeBase(this)初始化基类BUT BaseClass中的构造函数抛出错误

Validators.RequiredFieldValidator = function () { };

简单地不调用超级构造函数有什么问题。如果你继承的构造函数是抽象的(无用的事情),那么根本就不要调用它。