Создание абстрактных классов javascript с помощью Microsoft asp.net клиентская библиотека ajax

#javascript #interface #asp.net-ajax #abstract-class

#javascript #интерфейс #asp.net-ajax #абстрактный класс

Вопрос:

примечание: для тех, кто поддерживает 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");
  

Объяснение:

Почему я объясняю интерфейс, который не имеет отношения к вопросу? я объясню по ходу дела. Приведенный выше код создаст интерфейс 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 class). Когда когда-либо класс реализует интерфейс, наследует другой класс, который должна вызывать функция конструктора 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) для инициализации базового класса, НО конструктор в базовом классе выдает ошибку.

Вопрос

Как я должен эмулировать абстрактный класс с помощью Microsoft Asp.net Аякс

Комментарии:

1. @Raynos боже, прекрати голосование, ты читал заметку в верхней части вопроса. Microsoft Ajax здесь msdn.microsoft.com/en-us/library/bb397536.aspx и Microsoft поддерживает это. У нас нет других средств реализации ajax в asp.net .

2. «нет других средств реализации ajax в asp.net «. Извините, что? ЧТО? Когда-нибудь слышали о XMLHTTPRequest ? Прекратите использовать бесполезный мусор, который дает вам Microsoft.

3. @Deeptechtons ?? Люди постоянно используют Ajax в ASP.NET со всеми видами фреймворков. Вы можете использовать любую понравившуюся вам технику JavaScript; серверной структуре все равно.

4. @Pointy и Raynos отклонились от темы. Если вы можете быть конструктивными, пожалуйста, предоставьте ответ и ответьте, если бы вы ТОЛЬКО знали, что может предложить клиентская библиотека спасибо

5. @Deeptechtons не в тему. Вы думаете, что у вас проблема, и говорили вам, что ваша реальная проблема заключается в использовании «библиотеки MS ajax». Используйте достойную утилиту ajax, и все ваши проблемы исчезнут.

Ответ №1:

В конструкторе вызывается initializeBase(this) для инициализации базового класса, НО конструктор в базовом классе выдает ошибку

Validators.RequiredFieldValidator = function () { };

Что плохого в том, чтобы просто не вызывать суперконструктор. Если конструктор, от которого вы наследуете, должен быть абстрактным (бесполезная вещь), тогда просто никогда не вызывайте его.