Как описательно определить свои функции JS
Цель и задачи
Поскольку JavaScript является таким гибким языком, использование шаблонов на стороне сервера и клиента (лучшие практики) становится важным. Прочитав книгу Стояна Стефанова Шаблоны JavaScript и написав много кода на JavaScript, я научился использовать описательные, а не выразительные функции. Я объясню почему так ясно и просто, как только смогу.
Выражение функции //анти-шаблон
var sayHello; sayHello; //undefined sayHello(); //undefined is not a function var sayHello = function() { console.log(“Hellllooo!!!”); };
Объявление функции // шаблон
sayHello(); // Hellllooo!!! function sayHello () { console.log(“Hellllooo!!!”); };
В объявлении функции функция поднимается на вершину кучи, возвращает свой результат и может быть вызвана до определения своей функции. Это помогает избежать сложного поведения.
Конструкторы — это функции, которые создают экземпляры новых объектов. Думайте о них как о классе. При вызове конструктора создается новый объект со свойствами конструктора.
Обычной практикой определения наследования является создание конструкторов из других конструкторов. Без использования объявления функции и вызовом конструктора функции возвращается анонимная функция.
var Person = function (name, age) { this.name = name; this.age = age; }; function SanFranciscoPerson(name, age) { Person.call(this, name, age); //uses Person’s properties to create San FranciscoPerson this.location = “San Francisco”; this.constructor = Person; //sets this object’s constructor as Person }; jim = new SanFranciscoPerson(“Jim”, 29); jim; //SanFranciscoPerson {name: “Jim”, age: 29, location: “San Francisco”, constructor: function}
Что такое конструктор этого объекта?
jim.constructor; //function (name, age) { // this.name = name; // this.age = age; //}
Если бы мы использовали описательное определение функции, у нас было бы имя конструктора в вызове конструктора.
jim.constructor; //function Person (name, age) { // this.name = name; // this.age = age; //}
Удачного кодирования.