Шаблон Object.prototype - PullRequest
       4

Шаблон Object.prototype

0 голосов
/ 13 сентября 2018

Я не понимаю, как использовать шаблон Object.prototype с классами (es6);

Это мой код, я не уверен, что я правильно использовал Object.prototype

    class Course{ 
     constructor(title, author) {
        this.title = title;
        this.author = author;
      }
    }


    Course.prototype.toString = function (arguments) {
        console.log(this.title + "... Author: " + this.author);
    };

    var course_1 = new Course("Bootstrap 4", "Paul");
    var course_2 = new Course("Design Patterns", "Paul");

    course_1.toString();
    course_2.toString();

}

Должен ли я использовать что-то другое?

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Написание приложения с использованием классов es6 является альтернативой разработке непосредственно с использованием шаблона прототипа.

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

В вашем случае вы бы поместили методы, которые вы хотите присоединить к прототипу, в класс, который вы создали. Это больше похоже на классическое объектно-ориентированное программирование, как вы могли бы видеть в C ++ или Java.

Подробнее о классах es6 можно узнать на MDN здесь

По вашему примеру:

class Course { 
 constructor(title, author) {
    this.title = title;
    this.author = author;
  }

  toString(arguments) {
     console.log(this.title + "... Author: " + this.author);
  }
}

var course_1 = new Course("Bootstrap 4", "Paul");
var course_2 = new Course("Design Patterns", "Paul");

course_1.toString();
course_2.toString();
0 голосов
/ 14 сентября 2018

В вашем следующем коде:

class Course {
  constructor(title, author) {
    this.title = title;
    this.author = author;
  }
}


Course.prototype.toString = function(arguments) {
  console.log(this.title + "... Author: " + this.author);
};

var course_1 = new Course("Bootstrap 4", "Paul");
var course_2 = new Course("Design Patterns", "Paul");

course_1.toString();
course_2.toString();

Класс - это не что иное, как синтаксический сахар, который напоминает функциональность функции конструктора.Мы можем наблюдать это больше глубины в следующем примере:

class Person {
}

console.log(typeof Person);

Класс Person на самом деле является объектом функции конструктора.Как и обычные функции-конструкторы, мы можем расширить прототип, поместив свойства в объект-прототип.

Итак, в вашем примере:

Course.prototype.toString = function(arguments) {
  console.log(this.title + "... Author: " + this.author);
};

То, что на самом деле происходит под капотом, заключается в том, что вы помещаете свойство toString в объект функции конструктора Course.

0 голосов
/ 13 сентября 2018

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes

Классы ES6 - это синтаксический сахар, который позволяет вам избегать использования Object.prototype, вы просто определяете методы класса следующим образом:

    class Course{ 
         constructor(title, author) {
            this.title = title;
            this.author = author;
          }

         toString(arguments) {
            console.log(this.title + "... Author: " + this.author);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...