примечание: для тех соавторов-разработчиков Библиотека 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");
Пояснение:
Почему я объясняю интерфейс, который не имеет отношения к вопросу? Я объясню, как оно идет. Приведенный выше код создаст интерфейс IValidate
, который имитирует IValidator из фреймворка. Работа этих 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);
в последней строке вы можете заметить, что он реализует интерфейс (но не обеспечивает реализацию, потому что он будет предоставлен дочерними классами 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)
для инициализации базового класса, НО
Конструктор в BaseClass выдает ошибку .
Вопрос
Как мне эмулировать абстрактный класс с помощью Microsoft Asp.net Ajax