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.