На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ElcnU, ANDLL, fatalist
  
> наследование
    Уважаемые жабодрочеры здраствуйте! :D

    есть к примеру обьект Person
    ExpandedWrap disabled
      var Person = function(name, age) {
        this.name = name;
        this.age = age;
      }
       
      Person.prototype.toString = function(){
        return this.name + ' is a ' + this.age + ' years old.';
      }
       
       
      var gregory = new Person('Gregory', 42);
      console.log(gregory);

    хочу наследовать его, но так чтобы расширить с новыми атрибутами
    ExpandedWrap disabled
      var JavaDrocher = function(name, age, grade) {
      .....
      }
    Сообщение отредактировано: Cfon -
      Предлагаю зобанить аффтора, т.к. нормальный код он не приемлет :D
        все решил :D
        ExpandedWrap disabled
          // ctor Person
          function Person(name, age) {
            this.name = name;
            this.age = age;
          }
           
          // member-function Person.toString
          Person.prototype.toString = function() {
            return this.name + ' is a ' + this.age + ' years old.';
          }
           
          // ctor JavaDrocher
          function JavaDrocher(name, age, grade) {
            Person.call(this, name, age);
            this.grade = grade;
          }
           
          //  member-function JavaDrocher.toString
          JavaDrocher.prototype.toString = function(){
            return this.name + ' is a ' + this.age + ' years old. Grade ' + this.grade + '.';
          }
           
          // create new object
          var gregory = new JavaDrocher('Gregory', 42, 10);
          var miller = new JavaDrocher('Miller', 30, 9);
           
          console.log(gregory);
          console.log(miller);

        ExpandedWrap disabled
          Gregory is a 42 years old. Grade 10.
          Miller is a 30 years old. Grade 9.


        самое интересное тут вызов
        ExpandedWrap disabled
          Person.call(this, name, age);

        что он делает спросите? а я отвечу :D
        он обращается к функции Person, которая теперь благодаря функции call вызывается в контексте нашего нового объекта JavaDrocher и создает два новых атрибута name и age. гениально не правда ли? :D
        Сообщение отредактировано: Cfon -
          Цитата Cfon @
          гениально не правда ли?

          Нет, это глупо, т.к. это пережиток 2000х годов. И ты сейчас пытаешься повторить то, от чего уходили 20 лет.

          Добавлено
          Более того:
          ExpandedWrap disabled
            var gregory = new JavaDrocher('Gregory', 42, 10);
             
            console.log(greagory instanceof Person); // false


          Не работает. Давай дальше :whistle:
            :D :D
              исправил :D
              ExpandedWrap disabled
                // ctor Person
                function Person(name, age) {
                  this.name = name;
                  this.age = age;
                }
                 
                // member-function Person.toString
                Person.prototype.toString = function() {
                  return this.name + ' is a ' + this.age + ' years old.';
                }
                 
                // ctor JavaDrocher
                function JavaDrocher(name, age, grade) {
                  // тут магия JavaScript
                  Person.call(this, name, age);
                  this.grade = grade;
                }
                 
                // наследуем прототип Person
                JavaDrocher.prototype = Object.create(Person.prototype);
                 
                //  member-function JavaDrocher.toString
                JavaDrocher.prototype.toString = function(){
                  return Person.prototype.toString.call(this) + ' Grade ' + this.grade + '.';
                }
                 
                // create new object
                var gregory = new JavaDrocher('Gregory', 42, 10);
                var miller = new JavaDrocher('Miller', 30, 9);
                 
                console.log(gregory);
                console.log(miller);
                console.log(gregory instanceof Person); // true
                console.log(miller instanceof Person); // true
              Сообщение отредактировано: Cfon -
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0294 ]   [ 16 queries used ]   [ Generated: 23.04.24, 10:05 GMT ]