Учебники

CoffeeScript — классы и наследование

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

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

Классы в CoffeeScript

Решая эту проблему, CoffeeScript предоставляет базовую структуру, известную как класс, которая создается с использованием прототипов JavaScript. Вы можете определить класс в CoffeeScript, используя ключевое слово class, как показано ниже.

class Class_Name

пример

Рассмотрим следующий пример, здесь мы создали класс с именем Student, используя ключевое слово class .

class Student

Если вы скомпилируете приведенный выше код, он сгенерирует следующий JavaScript.

var Student;

Student = (function() {
  function Student() {}

  return Student;

})();

Создание класса

Мы можем создать экземпляр класса, используя оператор new, как и другие объектно-ориентированные языки программирования, как показано ниже.

new Class_Name

Вы можете создать созданный выше класс (Student), используя оператор new, как показано ниже.

class Student
new  Student

Если вы скомпилируете приведенный выше код, он сгенерирует следующий JavaScript.

var Student;

Student = (function() {
  function Student() {}

  return Student;

})();

new Student;

Определение конструктора

Конструктор — это функция, которая вызывается при создании экземпляра класса, его основное назначение — инициализация переменных экземпляра. В CoffeeScript вы можете определить конструктор, просто создав функцию с именем конструктора, как показано ниже.

class Student
  constructor: (name)->
  @name = name

Здесь мы определили конструктор и присвоили имя локальной переменной переменной экземпляра.

Оператор @ является псевдонимом ключевого слова this , он используется для указания переменных экземпляра класса.

Если мы поместим @ перед аргументом конструктора, он будет автоматически установлен в качестве переменной экземпляра. Поэтому приведенный выше код может быть написан просто, как показано ниже —

class Student
  constructor: (@name)->

пример

Вот пример конструктора в CoffeeScript. Сохраните его в файле с именем constructor_example.coffee.

#Defining a class
class Student
  constructor: (@name)->

#instantiating a class by passing a string to constructor
student = new Student("Mohammed");
console.log "the name of the student is :"+student.name

Компиляция кода

Откройте командную строку и скомпилируйте приведенный выше пример, как показано ниже.

c:\>coffee -c constructor_example.coffee

При выполнении вышеупомянутой команды это произведет следующий JavaScript.

// Generated by CoffeeScript 1.10.0
(function() {
  var Student, student;

  Student = (function() {
    function Student(name) {
      this.name = name;
    }

    return Student;

  })();

  student = new Student("Mohammed");

  console.log("The name of the student is :"+student.name);

}).call(this);

Выполнение кода

Запустите приведенный выше пример, выполнив следующую команду в командной строке.

coffee constructor_example.coffee

При запуске приведенный выше пример дает следующий вывод.

The name of the student is :Mohammed

Свойства экземпляра

Как и в объектах, мы также можем иметь свойства внутри класса. И они известны как свойства экземпляра .

пример

Рассмотрим следующий пример. Здесь мы создали переменные (name, age) и функцию (message ()) внутри класса и получили к ним доступ, используя его объект. Сохраните этот пример в файле с именем instance_properties_example.coffee.

#Defining a class
class Student
  name="Ravi"
  age=24
  message: ->
    "Hello "+name+" how are you" 

#instantiating a class by passing a string to constructor
student = new Student();
console.log student.message()

При компиляции приведенный выше код генерирует следующий вывод.

// Generated by CoffeeScript 1.10.0
(function() {
  var Student, student;

  Student = (function() {
    var age, name;

    function Student() {}

    name = "Ravi";

    age = 24;

    Student.prototype.message = function() {
      return "Hello " + name + " how are you";
    };

    return Student;

  })();

  student = new Student();

  console.log(student.message());

}).call(this);

Статические свойства

Мы можем определить статические свойства в классе. Область действия статических свойств ограничена внутри класса, и мы создаем статические функции, используя ключевое слово this или его псевдоним @, и мы должны получить доступ к этим свойствам, используя имя класса как Class_Name.property .

пример

В следующем примере мы создали статическую функцию с именем message. и получил к нему доступ. Сохраните его в файле с именем static_properties_example.coffee .

#Defining a class
class Student
  @message🙁name) ->
    "Hello "+name+" how are you" 
console.log Student.message("Raju")

Откройте командную строку и скомпилируйте вышеуказанный файл CoffeeScript, используя следующую команду.

c:\>coffee -c  static_properties_example.coffee

При компиляции он дает вам следующий JavaScript.

// Generated by CoffeeScript 1.10.0
(function() {
  var Student;

  Student = (function() {
    function Student() {}

    Student.message = function(name) {
      return "Hello " + name + " how are you";
    };

    return Student;

  })();

  console.log(Student.message("Raju"));

}).call(this);

Выполните вышеуказанный coffeeScript в командной строке, как показано ниже.

c:\>coffee static_properties_example.coffee

При выполнении приведенный выше пример дает следующий вывод.

Hello Raju how are you

наследование

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

пример

Ниже приведен пример наследования в CoffeeScript. Здесь у нас есть два класса, а именно Add и My_class . Мы унаследовали свойства класса с именем Add в классе My_class и получили к ним доступ, используя ключевое слово extends .

#Defining a class
class Add
   a=20;b=30
   
   addition:->
     console.log "Sum of the two numbers is :"+(a+b) 

class My_class extends Add

my_class = new My_class()
my_class.addition()

CoffeeScript использует прототипное наследование за кулисами. В CoffeeScript всякий раз, когда мы создаем экземпляры, конструктор родительского класса вызывается до тех пор, пока мы его не переопределим.

Мы можем вызвать конструктор родительского класса из подкласса, используя ключевое слово super (), как показано в примере, приведенном ниже.

#Defining a class
class Add
   constructor🙁@a,@b) ->
   
   addition:=>
     console.log "Sum of the two numbers is :"+(@a+@b) 

class Mul extends Add
   constructor🙁@a,@b) ->
     super(@a,@b)
   
   multiplication:->
     console.log "Product of the two numbers is :"+(@a*@b)

mul = new Mul(10,20)
mul.addition()
mul.multiplication()

Динамические Классы

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

class Animal
  constructor: (@name) ->

class Parrot extends Animal

Animal::rip = true

parrot = new Parrot("Macaw")
console.log "This parrot is no more" if parrot.rip

При выполнении вышеупомянутый CoffeeScript генерирует следующий код JavaScript.