クラス対機能- qual o jeito corretoデescrever JavaScriptなしmundoモデルノ?



イントロダクション
o LANは、アメニティをEs 6(ECMAMcript 2015)foi realmente umのguasのJavascript、trazendoの中で、as meras novidades、dentre elas、inclusのexo o da宣言aのクラスo o de de(クラスfoo {...).メッサAP - s ' s Cinco anos、vejo que ainda h .Nesse Artigo Vou trazer minha vis o o sobre o assunto e tamb m m algunsはpr pr . ticos de como euを使用します.

O ' acactece por baixo dos panos
Primeira Coisa et Endder O que de Fato acontece quando n ' s s as zas zas zas zaszas sのキーワードクラスエムレジュロ、簡潔な構文をシュガーパラO - ADDRのプロトタイプを参照してください.前iNorormenteは、NCIA DEのクラスが存在します、forma mais comum para se criar「Inst An NCIAS」時代Utilizando工場機能(戸田楽しみは、エムJavaScriptのものcapapdeデgerar objetos)です.Torna Obrigat - Re - O - USO - daのキーワードについての一考察Segueの例
//using Factory Functions
const Hero = function (name) {
    this.name = name;

    this.getName = function() {
        return this.name;
    }
}

const hero = new Hero('spiderman');
//it works
const hero = Hero('spiderman');
//it works

//using Class
class Hero {
    constructor(name) {
        this.name = name;
    }
    getName() {
        return this.name;
    }
}

const hero = new Hero('spiderman');
//it works
const hero = Hero('spiderman');
//TypeError: Class constructor Hero cannot be invoked without 'new'


パフォーマンス
私は、私を悩ませました.私は、私の質問をします.na minha opiniは、o o o o o o o o o o o o o a o a o a o a o a o a o a o a o a o a o a o a o a o a o a o a o a o a o a o a oアルプス・ディフェレンの意味についての一考察Outro Ponon Titanium Pitcar Albus Merisegundosデ「Exusu Messe - o o」Por「Est Else Titica」、O que pode Vir a Economizar HorasデDesenvolvimentoは、Vocを歌います.

Edit1: Caso você, assim como eu, goste de escovar alguns bytes, lembre-se que há outros syntax sugar bastante utilizados atualmente ("async / await", por exemplo). E há ferramentas (como o Babel, por exemplo) que permitem transpilar seu código de diferentes maneiras (explorando diferentes possiblidades de performance).

Edit2: Fui questionado por um amigo da comunidade sobre as evidências para esta afirmação (que eram baseadas na minha experiência trabalhando com Node). Achei interessante e fiz um rápido benchmark em cima de alguns exemplos utilizados. Caso queiram conferir, segue o github. Fiquem a vontade para testar e contribuir também.



Orijetosのオリゲータ
EU Enentendo que Muito da Muito da Decep Amerumas pessoas tiveram ao Tentar Liberzar Esa特徴,foi devido a ma予想されるerrada de que isso faria comは言語学的なtivesum um suporteを合計します.Certeza Apenas Aは、クラスe o oのクラスo o o o o o o o o o o o o o susiciente para esse prop - de sitoとしてのクラスを宣言します.マス・パラ・イスソン・ノン・テンテノノソソ・クエドドタイプ

表彰式
日本語:セルテーザエッセo pon mais releante sodaエトクエストエサクエストo . JavaScriptのエヌの言語の言語は、Mas PomoresなしMundo e Muito disso se deve ao Fuo de Ter - Aa Baixa curva de aprendizado、serマルチパラダイムe Altamente Flex - de - Vel.Ao mesmoテンポqueは、バイアスレガリス、タム・プ・ム・ポール・サ・ダ・ダ・メイス・プルーデンス、Ma ma Vaz que faz com que mesma tenha padr - es - es poco r - ggidos e isso pode se Tornar um問題点projetos grandes、タイムズ未熟です.ファクトデtermosクラスエムJavascript faz com que mesna se torne mais amig - di vel - pardesvolvedores que venham de outras language agen(uma vez que o conceito de class are um dos mais usezados h de um um bom pate em programama mersuo o),al e m m trtrer maor clareza para o c c didi em diversas sisise sise es .Um Outro Fatorは、que EU、アッシムcomo grande parte da comunidade、venho programando bastante em typescript(クラスfazem mais sentido ainda、devido a orientaは、o objetos por example)o、isso torna o uso desse recurso bastante自然のpara mim.包括的な、GrandesフレームワークJSコモは、E角度、反応して、利用します.

PS: não vou colocar os exemplos equivalentes com Prototype, pois a ideia é muito mais enfatizar o recurso class do que fazer um comparativo entre ambas (além de considerar este um recurso ultrapassado).


パラPadronizar E Traster Erros HTTP ( AO Herdar o Tipo Error , n ' s s temos acesso - tudo que essa classe nos oferece , como a call stack erro , por example )
class BadRequestError extends Error {
    constructor(parameter) {
        super();

        this.status = 400;
        this.title = 'BadRequestError';
        this.message = `missing param [${parameter}]`
    }
}

class UnauthorizedError extends Error {
    constructor() {
        super();

        this.status = 401;
        this.title = 'UnauthorizedError';
        this.message = 'invalid token';
    }
}


class ServerError extends Error {
    constructor() {
        super();

        this.status = 500;
        this.title = 'ServerError';
        this.message = `unespected server error, please contact support`
    }
}

function httpError(error, response) {
    console.log(error);

    //some custom error logic

    if (!error.status) {
        error = new ServerError();        
    }

    return response.status(error.status).send({
        title: error.title,
        message: error.message
    });
}


function httpHandler(request, response) {
    try {
        //do something
        // throw new BadRequestError('parameterName')
        // throw new UnauthorizedError()
        // throw new Error('Random Error')
    } catch (error) {
        return httpError(error, response);
    }
}

<研究ノート>ナチスの言語学について(第二部会,<特集>第六十五回学術大会紀要)
const EventEmitter = require('events');

class Call extends EventEmitter {
    constructor() {
        super();
        this.startAt = null;
        this.endAt = null;
    }

    save() {
        //save call on database
    }
}


const call = new Call();

call.on('start', () => {
    console.log('starting call');
    this.startAt = new Date();
});

call.on('finish', () => {
    console.log('finishing call');
    this.endAt = new Date();
    this.save();

    console.log('call duration', this.endAt - this.startAt);
});

setTimeout(() => {
    call.emit('start');
}, 1000);

setTimeout(() => {
    call.emit('finish');
}, 4000);

Prip Inteetar Dependencias ( Aqui O Met - de - do - Constructor nos d - Male clareza Em - rela Period - o a inicializa - raserto - o - in - ncias )
class LoggerService {
    info(...args) {
        console.log('[info]', ...args);
    }

    error(...args) {
        console.error('[error]', ...args);
    }
}

//broker service
class BrokerService {
    constructor({ logger }) {
        this.logger = logger;
    }

    ack(message) {
        this.logger.info('[ack message]', message);
    }
}

class HistoryService {
    constructor({ logger }) {
        this.logger = logger;
    }

    save(msg) {
        this.logger.info('[save message]', msg);
    }
}

class Subscriber {
    constructor({ broker, logger, history }) {
        this.broker = broker;
        this.logger = logger;
        this.history = history;
    }

    handle(msg) {
        //do something

        this.history.save(msg);
        this.broker.ack(msg);
        this.logger.info('done');
    }
}

//service factories
const logger = new LoggerService();
const broker = new BrokerService({ logger });
const history = new HistoryService({ logger });

//subscriber
const subscriber = new Subscriber({ broker, logger, history });

subscriber.handle({ queue: 'test', content: 'I am a message' });

apesar de usar bastante oはde class,em algunos casos eu gosto de利用関数を再帰する.seguem algunsの雇用
パラ・クリアー・ヘルパー著『楽しい形容詞』
//helpers.js
function validateEmail(email) {
    //validate email
}

function validatePhoneNumber(number) {
    //validate number
}

module.exports = {
    validateEmail,
    validatePhoneNumber
};

//index.js
const { validateEmail, validatePhoneNumber } = require('./helpers');

パラクリアーミドルウェア
//auth.js
module.exports = (request, response, next) {
    auth();
    next();
}

Afinal、devo usarクラスou関数?
アルヴィス・カススEU<研究ノート>サクラス・クリカイン・イン・アヌ・カス・スン・ノース・クラッセ・オ・ユンツォ・ハラン・ア・A ,クララメンツ・EUエスコリア階級se vocは、vai trabalhar comのプログラムを実行します.Por - like m , nem tudo - like apenas preto e branco<論文>メンテ・アバタ著『アヴェッタ』をめぐってソフトウェアは、como cuidarデ馬BioOtecteca、Vocは、先駆的なオーガナイザーOS livros comオーマCerta L - Trans Gicaパラque os mesmos fa SemeアムSentido Onde Estsendo - assim、mais重要なque que escolher um ou ou otro、are conconecer os recursos dispon - le veis para - ter - mais op

結論
N ' s ' s escrevemos c didi para desenvolvedoresPOR ESSEの動機は、ソフトウェアデQualidadeは(al AtendaのOSのLensitosパラクァFoDesignado e possua - uma boaのパフォーマンス)は、Tambのmの重要性のEsCrever CのDon gos Visは、Veis、entendは、veis e que possuam - umaのインターフェイスamgを取得します.フェアレンタマス・フェトレンタ・モトイン・インタージェニエス・エストラ・オベッティヴォにおけるクラスの概念ENTのAOは、o o seのse vocは、アイヌnの巣o o ouのTEMのopumのulumのtipoデのprecomeito、recomendo fortemente abrir um
E vocは、s、o que achachsosoe o assunto?Fiquemは、vontadeパラシュートで降下する人colaborar com opiniは、es .