Показать сообщение отдельно
  #24 (permalink)  
Старый 19.03.2014, 19:48
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Maxmaxmaximus11
не, родительский конструктор виден будет по цепочке прототипов если он есть так что бакс не обязательно.
допустим, есть объект с методом, внутри которого вызывается супер метод
var obj = {
    method: function() {
        // тут этот объект вызывает свой супер метод
    }
};

С твоим подходом проблемы начнутся, если вызвать метод в контексте другого объекта. Т.е. "цепочка" супер методов в лучшем случае не будет вызвана, в худшем нарушена.
<script src="http://nervgh.github.io/js/yum/yum.js"></script>
<script>
    /**********************
     * CLASSES
     * *********************/

    /**
     * Class Animal
     * @param {Number} legs
     * @constructor
     */
    function Animal(legs) {}

    Animal.prototype.destroy = function() {
        console.log('Animal.destroy()');
    };

    // ------------------------

    // Inheritance
    Object.inherit(Mammal, Animal);

    /**
     * Class Mammal
     * @constructor
     */
    function Mammal(legs, teeth) {
        // call the Animal constructor
        Mammal.super_.apply(this, arguments);
    }

    Mammal.prototype.destroy = function() {
        console.log('Mammal.destroy()');
        Mammal.super_.prototype.destroy.call(this);
    };

    // ------------------------

    // Inheritance
    Object.inherit(Cat, Mammal);

    /**
     * Class Cat
     * @constructor
     */
    function Cat(legs, teeth, tails) {
        // call the Mammal constructor
        Cat.super_.apply(this, arguments);
    }

    Cat.prototype.destroy = function() {
        console.log('Cat.destroy()');
        Cat.super_.prototype.destroy.call(this);
    };


    /********************
     * USAGE / INSTANCE
     ********************/

    var cat = new Cat();

    cat.destroy(); // Cat -> Mammal -> Animal;
    console.log('--------------------');
    cat.destroy.call(this); // Cat -> Mammal -> Animal;

</script>


Сообщение от Maxmaxmaximus11
но мой способ поддерживает множественное наследование)
нет. Почему, читай тему.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 19.03.2014 в 19:53.
Ответить с цитированием