Недавно я узнал, что функция Javascript может иметь классы, поэтому мне было интересно, возможен ли ООП через javascript. Это? Если да, не могли бы вы указать несколько учебных пособий или сайт, с которого я могу начать?

7
Starx 21 Авг 2010 в 06:48

6 ответов

Лучший ответ

ООП определенно возможно. Хотя в Javascript нет «классов», как в большинстве языков ОО, то, что у него есть, называется «прототипами». По сути, объекты определяются в терминах других объектов, а не классов. (Объекты также могут в некоторой степени эмулировать классы для тех, кто не может сосредоточиться на наследовании прототипов.)

Можно утверждать, что возможности ОО JS превосходят возможности большинства языков, учитывая, что объекты играют даже более важную роль, чем в языках с классами.

8
cHao 21 Авг 2010 в 02:57

Вот пример выполнения структуры OO в javascript, который использует библиотеку (не требуется, рекомендуется)

//Create and define Global NameSpace Object
( function(GlobalObject, $, undefined) 
{
    GlobalObject.PublicMethod = function()
    {
        ///<summary></summary>
    }

    GlobalObject.Functionality = {}

}) (GlobalObject = GlobalObject || {}, jQuery);

//New object for specific functionality
( function(Events, $, undefined)
{
    //Member Variables 
    var Variable; // (Used for) , (type)

    // Initialize
    Events.Init = function()
    {
        ///<summary></summary>
    }

    // public method
    Events.PublicMethod = function(oParam) 
    {
        ///<summary></summary>
        ///<param type=""></param>
    }

    // protected method (typically define in global object, but can be made available from here)
    GlobalObject.Functionality.ProtectedMethod = function()
    {
        ///<summary></summary>
    }

    // internal method (typically define in global object, but can be made available from here)
    GlobalObject.InternalMethod = function()
    {
        ///<summary></summary>
    }

    // private method
    var privateMethod = function()
    {
        ///<summary></summary>
    }

    Events.PublicProperty = "Howdy Universe";
}) (GlobalObject.Functionality.Events = GlobalObject.Funcitonality.Events || {}, jQuery )

// Reusable "class" object
var oMultiInstanceClass = function()
{
    // Memeber Variables again
    var oMember = null; // 

    // Public method
    this.Init = function(oParam)
    {
        oMember = oParam;
    }
}

Сила этого в том, что он автоматически инициализирует глобальный объект, позволяет поддерживать целостность вашего кода и организует каждый фрагмент функциональности в определенную группу по вашему определению.

Эта структура является надежной, представляя все основные синтаксические вещи, которые можно ожидать от ООП без ключевых слов.

Есть даже несколько оригинальных способов настройки интерфейсов. Если вы решите зайти так далеко, простой поиск даст вам несколько хороших уроков и советов.

Даже настройка intellisense возможна с помощью javascript и visual studio, а затем определение каждой части и ссылки на них делает написание javascript более понятным и более управляемым.

Использование этих трех методов в соответствии с вашей ситуацией помогает поддерживать чистоту глобального пространства имен, организовывать код и поддерживать разделение задач для каждого объекта ... при правильном использовании. Помните, что объектно-ориентированный дизайн бесполезен, если вы не используете логику использования объектов!

0
Brett Weber 10 Сен 2014 в 15:21

Да. Это возможно. Я когда-либо использовал Script # для создания javascript-приложения, позволяющего писать код на C # и переводить на JavaScript. Это хороший опыт, особенно для большого проекта, он заставит вас думать ООП-способом, чтобы упорядочить ваш код.

Инструмент можно найти по адресу: (он с открытым исходным кодом, но пишет сотрудником Microsoft) http://scriptsharp.com

Если вы не знакомы с C #, вы также можете найти аналогичный инструмент для написания JavaScript на Java.

И если вы не хотите их использовать, вы можете исследовать, как он преобразует код, чтобы понять, как он реализует функцию ООП.

0
ZijingWu 23 Июл 2013 в 09:08

Javascript - это по сути ООП язык. Как уже говорили другие, это бесклассовое, но у вас есть выбор, как вы хотите создавать объекты.

Вы можете создавать объекты, которые используют различные типы наследования.

  1. Псевдоклассическое наследство. Здесь вы строите функции конструктора и используете new для создания классов. Это будет выглядеть как типичный ООП на основе классов.
  2. Прототип наследования. - Это то, на что ссылались многие другие.
  3. Функциональное наследование. - В этом режиме вы используете замыкания, анонимные функции и стратегические возвраты для создания действительно закрытых и защищенных переменных.

Среди этих типов есть довольно много переходов. Достаточно сказать, что Javascript - это очень гибкий и мощный язык для ООП.

Я только изучаю ООП в JS. Вот пример функционального наследования, которое я собрал:

jsFiddle

// Object constructor
var parent = function (initial) {
    var that, privateNumber, hiddenVar; 
    that = {};    

    // Public variables
    that.share = initial - 32;

    // Public methods
    that.getNumber = function () {
        return privateNumber;                
    };

    // Private properties
    privateNumber = initial; 
    hiddenVar = "haha can't get me";    

    return that;
};

// Second object constructor that inherits from parent
var child = function (initial) {
    var that, privateName;

    // Inherit from parent
    that = parent(initial);

    // Public methods
    that.getName = function () {
        return privateName;                
    };

    // Private poroperties
    privateName = "Ludwig the " + initial + "th";

    return that;
};

// Create objects
var newPar1 = parent(42);
var newPar2 = parent(10);   

var newChild1 = child(0);
var newChild2 = child(100);

// Output on the jsFiddle page refed above: http://jsfiddle.net/ghMA6/
3
Peter Ajtai 21 Авг 2010 в 04:42

ООП занимает центральное место в Javascript, но это не классический ООП. Javascript использует прототипы, а не классы.

Дуглас Крокфорд - гений Javascript, поэтому его наследование прототипа в Javascript является хорошей отправной точкой. Поиски в Google по "Javascript OOP", скорее всего, приведут к просмотру некоторых полезных статей Также мне нравится статья Майка Косса.

6
Matchu 21 Авг 2010 в 02:58