Показать сообщение отдельно
  #17 (permalink)  
Старый 15.04.2013, 12:08
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Пример наследование из библиотеки createJs с которой сейас работаю
//обьявляем неймспейс
this.createjs = this.createjs||{};

//наследуем
(function() {
    //конструктор
    var Shape = function(prop) {
          //вызов функции инициализации
          this.initialize(prop);
    }

    //наследуем от родителя
    var p = Shape.prototype = new createjs.DisplayObject();

    //сохраним функцию инициализации родителя, вдруг пригодится
    p.DisplayObject_initialize = p.initialize;

    //инициализация, по сути конструктор из классического ООП
    p.initialize=function(prop){
        this.x=prop.x;
        this.y=prop.y;
    }


    // обьявляем новые методы и свойства
    p.graphics = null;
    p.test = function(){ hello() };

    //приватный метод
    function hello(){
        alert('hello');
    }

    //записываем в неймспейс
    this.createjs.Shape=Shape  
})()


хочу разЪяснить один момент.(для новичков)
Главный недостаток вышеприведённого примера в том что вызывается конструктор DisplayObject при наследовании. Иногда это нужно, а иногда недопустимо.

Эта проблема легко решается.
Если вызов контструктора нужен, тогда оставляете
var p = Shape.prototype = new createjs.DisplayObject();

А если ненужен, то пишите
var p = Shape.prototype = Object.create( createjs.DisplayObject.prototype);


+ если вам вдруг понадобится вызвать конструктор родителя (иногда используется цепочка конструкторов) вы можете его вызвать через DisplayObject_initialize

вот ради этих возможностей и использован трюк с выносом кода конструктора в функцию initialize

P.S. Однако я сам использую по возможности функцию класс и я не вижу смысла боятся подобных функций.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 15.04.2013 в 12:52.
Ответить с цитированием