Get anonymous access to any content. Ultra-fast. 100% secure. -90% 100% Copy Code 2 iTop VPN Pro License Key for Free Main Features Note: The number of activations is limited!. "/> ls3. Enter your iTop VPN account and password, click the Log In button.. "/> bypassed games for school We and our partners store and/or access information on a device, such as cookies and process personal data, such The GSDK connects your game server to a local agent installed on the VM. This agent facilitates key server interactions with the PlayFab control infrastructure. When your game server is initialized, it will be put into a preparing state, with PlayFab waiting for your game server to call ReadyForPlayers (). Once this is called, the game server.Starting April 1 st, Azure PlayFab Multiplayer 3.Profile các thành viên Nữ nhà JS model - Facebook; 4.Thành viên mới Name : Bưu Thị Lão Nghệ… - Hoang Gia Wedding; 5.Top 11 nam thần chiếm số lượng fan đông đảo nhà Js - TopShare; 6.Top 18 js model trung quốc là gì mới nhất 2022 - Trangwiki; 7.Công ty js model trung quốc - Deha law Nhâm Thế Hào nổi lên nhờ rất nhiều những đoạn clip ngắn trên MXH khoe vẻ điển trai không tì vết. Anh chàng sở hữu những đường nét rất nam tính, góc nghiêng thần thánh cùng chiều cao 1m87. Hiện tại, Thế Hào đang là người mẫu tại công ty JS MODEL ở Hàng Châu (Trung Quốc). 285 Followers, 52 Following, 263 Posts - See Instagram photos and videos from JS Model Profile (@jsmodelprofile) Workplace Enterprise Fintech China Policy Newsletters Braintrust cat c15 acert intake valve actuator delete Events Careers craigslist albany oregon rooms for rent Khám phá các video ngắn liên quan đến js model thành viên trên TikTok. Xem nội dung phổ tiến từ các tác giả sau đây: Trà My(@_myei29_), 嘉尚傳媒(js模型)(@hoanglinh059), Trà My(@_myei29_), JS MODEL(@jsmodel3), 🔥 Quỳnh Nga 🔥(@quynhnga598_), 嘉尚傳媒(js模型)(@hoanglinh059), JS MODEL(@jsmodel3 L0bbD. Previous Este guia fornece tudo o que você precisa para começar com a sintaxe de módulo do background em módulosOs programas JavaScript começaram muito pequenos - a maior parte do seu uso nos primeiros dias era para executar tarefas isoladas de script, fornecendo um pouco de interatividade às suas páginas da Web sempre que necessário, de modo que scripts grandes geralmente não eram necessários. Com o avanço rápido da tecnologia agora temos aplicativos completos sendo executados em navegadores com muito JavaScript, além de JavaScript ser usado em outros contextos por exemplo. Portanto, fez sentido nos últimos anos começar a pensar em fornecer mecanismos para dividir programas JavaScript em módulos separados que podem ser importados quando necessário. O possui essa capacidade há muito tempo e existem várias bibliotecas e estruturas JavaScript que permitem o uso do módulo por exemplo, outros CommonJS e AMD-sistemas de módulos baseados em RequireJS, e mais recentemente Webpack e Babel. A boa notícia é que os navegadores modernos começaram a dar suporte nativamente à funcionalidade do módulo, e é sobre isso que este artigo trata. Isso só pode ser uma coisa boa - os navegadores podem otimizar o carregamento de módulos, tornando-o mais eficiente do que ter que usar uma biblioteca e fazer todo esse processamento extra no lado do cliente e viagens de ida e volta do navegadorO uso de módulos JavaScript nativos depende doimport e export afirmações; estes são suportados nos navegadores da seguinte maneiraimportaBCD tables only load in the browserexportaBCD tables only load in the browserApresentando um exemploPara demonstrar o uso dos módulos, criamos um conjunto simples de exemplos que você pode encontrar no GitHub. Estes exemplos demonstram um conjunto simples de módulos que criam um em uma página da Web e desenhe e relate informações sobre formas diferentes na tela. Estes são bastante triviais, mas foram mantidos deliberadamente simples para demonstrar claramente os módulos. Nota Nota Se você deseja fazer o download dos exemplos e executá-los localmente, precisará executá-los por meio de um servidor da web de uma estrutura básicaNo nosso primeiro exemplo consulte basic-modules nós temos uma estrutura de arquivos da seguinte maneira modules/ Nota Nota Todos os exemplos neste guia têm basicamente a mesma estrutura; o exposto acima deve começar a ficar bem familiar. Os dois módulos do diretório modules são descritos abaixo — contém funções relacionadas à configuração da tela create — cria uma tela com uma largura e altura especificadas dentro de um invólucro com um ID especificado, que é anexado dentro de um elemento pai especificado. Retorna um objeto que contém o contexto 2D da tela e o ID do wrapper. createReportList — cria uma lista não ordenada anexada dentro de um elemento de wrapper especificado, que pode ser usado para gerar dados de relatório. Retorna o ID da lista. — contém name — uma constante contendo a string 'square'. draw — desenha um quadrado em uma tela especificada, com um tamanho, posição e cor especificados. Retorna um objeto que contém o tamanho, a posição e a cor do quadrado. reportArea — grava a área de um quadrado em uma lista de relatórios específica, considerando seu tamanho. reportPerimeter — grava o perímetro de um quadrado em uma lista de relatórios específica, considerando seu comprimento. Aside — .mjs versus .jsNeste artigo, usamos extensões .js para nossos arquivos de módulo, mas em outros recursos você pode ver a extensão .mjs usada. A documentação da V8 recomenda isso, por exemplo. Os motivos apresentados são É bom para maior clareza, ou seja, deixa claro quais arquivos são módulos e quais são JavaScript regulares. Ele garante que seus arquivos de módulo sejam analisados como um módulo por tempos de execução, como e construir ferramentas como Babel. No entanto, decidimos continuar usando .js, pelo menos por enquanto. Para que os módulos funcionem corretamente em um navegador, você precisa garantir que seu servidor os esteja servindo com um cabeçalho Content-Type que contenha um tipo MIME JavaScript, como text / javascript. Caso contrário, você receberá um erro estrito de verificação do tipo MIME, de acordo com as linhas "O servidor respondeu com um tipo MIME não JavaScript" e o navegador não executará seu JavaScript. A maioria dos servidores já define o tipo correto para arquivos .js, mas ainda não para arquivos .mjs. Servidores que já veiculam arquivos .mjs incluem corretamente GitHub Pages e http-server para Tudo bem se você já estiver usando esse ambiente ou se não estiver, mas souber o que está fazendo e tiver acesso ou seja, você pode configurar o servidor para definir a configuração correta Content-Type para arquivos .mjs. No entanto, isso pode causar confusão se você não controlar o servidor do qual está servindo arquivos ou publicar arquivos para uso público, como estamos aqui. Para fins de aprendizado e portabilidade, decidimos manter Se você realmente valoriza a clareza de usar .mjs para módulos versus usar .js para arquivos JavaScript "normais", mas não deseja se deparar com o problema descrito acima, sempre poderá usar .mjs durante o desenvolvimento e convertê-los em .js durante sua etapa de construção. Também é importante notar que Algumas ferramentas podem nunca suportar .mjs, comoTypeScript. O atributo é usado para indicar quando um módulo está sendo apontado, como você verá abaixo. Exportando recursos do móduloA primeira coisa que você faz para obter acesso aos recursos do módulo é exportá-los. Isso é feito usando o export declaração. A maneira mais fácil de usá-lo é colocá-lo na frente de qualquer item que você queira exportar para fora do módulo, por exemplo export const name = 'square'; export function drawctx, length, x, y, color { = color; y, length, length; return { length length, x x, y y, color color }; } Você pode exportar funções, var, let, const, e — como veremos mais tarde - classes. Eles precisam ser itens de nível superior; você não pode usar a exportação dentro de uma função, por exemplo. Uma maneira mais conveniente de exportar todos os itens que você deseja exportar é usar uma única instrução de exportação no final do arquivo do módulo, seguida por uma lista separada por vírgula dos recursos que você deseja exportar envoltos em chaves. Por exemplo export { name, draw, reportArea, reportPerimeter }; Importando recursos para o seu scriptDepois de exportar alguns recursos do seu módulo, é necessário importá-los para o script para poder usá-los. A maneira mais simples de fazer isso é a seguinte import { name, draw, reportArea, reportPerimeter } from './modules/ Você usa o import , seguida por uma lista separada por vírgula dos recursos que você deseja importar agrupados em chaves, seguidos pela palavra-chave de, seguida pelo caminho para o arquivo do módulo - um caminho relativo à raiz do site, que para nossa basic-modules exemplo seria/js-examples/modules/basic-modules. No entanto, escrevemos o caminho de maneira um pouco diferente - estamos usando a sintaxe de ponto . Para significar "o local atual", seguido pelo caminho além do arquivo que estamos tentando encontrar. Isso é muito melhor do que escrever todo o caminho relativo a cada vez, pois é mais curto e torna o URL portátil - o exemplo ainda funcionará se você o mover para um local diferente na hierarquia do site. Então, por exemplo /js-examples/modules/basic-modules/modules/ torna-se ./modules/ Você pode ver essas linhas em ação em Nota Nota Em alguns sistemas de módulos, você pode omitir a extensão do arquivo e o ponto '/modules/square'. Isso não funciona nos módulos JavaScript nativos. Depois de importar os recursos para o seu script, você pode usá-los exatamente como eles foram definidos no mesmo arquivo. O seguinte é encontrado em abaixo das linhas de importação let myCanvas = create'myCanvas', 480, 320; let reportList = createReportList let square1 = draw 50, 50, 100, 'blue'; reportArea reportList; reportPerimeter reportList; Nota Nota Embora os recursos importados estejam disponíveis no arquivo, eles são visualizações somente leitura do recurso que foi exportado. Você não pode alterar a variável importada, mas ainda pode modificar propriedades semelhantes à const. Além disso, esses recursos são importados como ligações ativas, o que significa que eles podem mudar de valor mesmo que você não possa modificar a ligação ao contrário de o módulo ao seu HTMLAgora, apenas precisamos aplicar o módulo à nossa página HTML. Isso é muito semelhante ao modo como aplicamos um script regular a uma página, com algumas diferenças notáveis. Primeiro de tudo, você precisa incluir type="module" no elemento, para declarar esse script como um módulo. Para importar o script, usamos este Você também pode incorporar o script do módulo diretamente no arquivo HTML, colocando o código JavaScript no corpo do elemento /* JavaScript module code here */ O script para o qual você importa os recursos do módulo atua basicamente como o módulo de nível superior. Se você o omitir, o Firefox, por exemplo, exibirá um erro "SyntaxError as declarações de importação podem aparecer apenas no nível superior de um módulo". Você só pode usar import e export instruções dentro de módulos, não scripts diferenças entre módulos e scripts padrão Você precisa prestar atenção nos testes locais - se você tentar carregar o arquivo HTML localmente com um arquivo// URL, você encontrará erros do CORS devido a requisitos de segurança do módulo JavaScript. Você precisa fazer seus testes através de um servidor. Além disso, observe que você pode obter um comportamento diferente das seções de script definidas dentro dos módulos e não nos scripts padrão. Isso ocorre porque os módulos usam strict mode automaticamente. Não há necessidade de usar o atributo deferir consulte attributes ao carregar um script de módulo; módulos são adiados automaticamente. Os módulos são executados apenas uma vez, mesmo que tenham sido referenciados em várias tags . Por último, mas não menos importante, vamos esclarecer os recursos do módulo são importados para o escopo de um único script - eles não estão disponíveis no escopo global. Portanto, você poderá acessar apenas os recursos importados no script para o qual eles foram importados e não poderá acessá-los no console JavaScript, por exemplo. Você ainda receberá erros de sintaxe mostrados no DevTools, mas não poderá usar algumas das técnicas de depuração que você esperava usar. Exportações padrão versus exportações nomeadasA funcionalidade que exportamos até agora foi composta por named exports — cada item seja uma função, const, etc. foi referido por seu nome na exportação e esse nome também foi usado para se referir a ele na importação. Há também um tipo de exportação chamado default export — isso foi projetado para facilitar a função padrão fornecida por um módulo e também ajuda os módulos JavaScript a interoperar com os sistemas de módulos CommonJS e AMD existentes conforme explicado em ES6 In Depth Modules por Jason Orendorff; procure por "Exportações padrão". Vejamos um exemplo ao explicar como ele funciona. Nos nossos módulos básicos você pode encontrar uma função chamada randomSquare que cria um quadrado com cor, tamanho e posição aleatórios. Queremos exportar isso como padrão, portanto, na parte inferior do arquivo, escrevemos isso export default randomSquare; Note a falta dos colchetes. Em vez disso, poderíamos acrescentar export default na função e defina-a como uma função anônima, assim export default functionctx { ... } No nosso arquivo importamos a função padrão usando esta linha import randomSquare from './modules/ Isso ocorre porque há apenas uma exportação padrão permitida por módulo e sabemos que randomSquare é isso. import {default as randomSquare} from './modules/ Nota Nota A sintaxe as para renomear itens exportados é explicada abaixo no Renaming imports and exports conflitos de nomenclaturaAté agora, nossos módulos de desenho de forma de tela parecem estar funcionando bem. Mas o que acontece se tentarmos adicionar um módulo que lide com o desenho de outra forma, como um círculo ou triângulo? Essas formas provavelmente teriam funções associadas, como draw, reportArea, etc. também; se tentássemos importar diferentes funções com o mesmo nome para o mesmo arquivo de módulo de nível superior, acabaríamos com conflitos e erros. Felizmente, existem várias maneiras de contornar isso. Veremos isso nas próximas importações e exportaçõesDentro dos colchetes da instrução de importação e exportação, você pode usar a palavra-chave junto com um novo nome de recurso, para alterar o nome de identificação que será usado para um recurso dentro do módulo de nível superior. Por exemplo, os dois itens a seguir executariam o mesmo trabalho, embora de uma maneira ligeiramente diferente // inside export { function1 as newFunctionName, function2 as anotherNewFunctionName }; // inside import { newFunctionName, anotherNewFunctionName } from './modules/ // inside export { function1, function2 }; // inside import { function1 as newFunctionName, function2 as anotherNewFunctionName } from './modules/ Vejamos um exemplo real. Na nossa renaming diretório, você verá o mesmo sistema de módulos do exemplo anterior, exceto que adicionamos e módulos para desenhar e relatar círculos e triângulos. Dentro de cada um desses módulos, temos recursos com os mesmos nomes sendo exportados e, portanto, cada um tem o mesmo export declaração na parte inferior export { name, draw, reportArea, reportPerimeter }; Ao importá-los para o se tentarmos usar import { name, draw, reportArea, reportPerimeter } from './modules/ import { name, draw, reportArea, reportPerimeter } from './modules/ import { name, draw, reportArea, reportPerimeter } from './modules/ O navegador geraria um erro como "SyntaxError redeclaration of import name" Firefox. Em vez disso, precisamos renomear as importações para que sejam únicas import { name as squareName, draw as drawSquare, reportArea as reportSquareArea, reportPerimeter as reportSquarePerimeter } from './modules/ import { name as circleName, draw as drawCircle, reportArea as reportCircleArea, reportPerimeter as reportCirclePerimeter } from './modules/ import { name as triangleName, draw as drawTriangle, reportArea as reportTriangleArea, reportPerimeter as reportTrianglePerimeter } from './modules/ Observe que você pode resolver o problema nos arquivos do módulo, // in export { name as squareName, draw as drawSquare, reportArea as reportSquareArea, reportPerimeter as reportSquarePerimeter }; // in import { squareName, drawSquare, reportSquareArea, reportSquarePerimeter } from './modules/ E funcionaria da mesma forma. Qual o estilo que você usa depende de você, no entanto, sem dúvida faz mais sentido deixar o código do módulo em paz e fazer as alterações nas importações. Isso faz especialmente sentido quando você está importando de módulos de terceiros sobre os quais você não tem controle. 24/5000 Criando um objeto de módulo O método acima funciona bem, mas é um pouco confuso e longo. Uma solução ainda melhor é importar os recursos de cada módulo dentro de um objeto de módulo. O seguinte formulário de sintaxe faz isso import * as Module from './modules/ Isso captura todas as exportações disponíveis no e as torna disponíveis como membros de um objeto Module, efetivamente dando o seu próprio namespace. Então, por exemplo etc. Novamente, vejamos um exemplo real. Se você for ao nosso module-objects diretório, você verá o mesmo exemplo novamente, mas reescrito para aproveitar essa nova sintaxe. Nos módulos, as exportações são todas da seguinte forma simples export { name, draw, reportArea, reportPerimeter }; As importações, por outro lado, são assim import * as Canvas from './modules/ import * as Square from './modules/ import * as Circle from './modules/ import * as Triangle from './modules/ Em cada caso, agora você pode acessar as importações do módulo abaixo do nome do objeto especificado, por exemplo let square1 = 50, 50, 100, 'blue'; reportList; reportList; Agora você pode escrever o código da mesma forma que antes contanto que inclua os nomes dos objetos quando necessário e as importações sejam muito mais e classesComo sugerimos anteriormente, você também pode exportar e importar classes; essa é outra opção para evitar conflitos no seu código e é especialmente útil se você já tiver o código do módulo gravado em um estilo orientado a objetos. Você pode ver um exemplo do nosso módulo de desenho de forma reescrito com as classes ES em nosso classes diretório. Como exemplo, o O arquivo agora contém todas as suas funcionalidades em uma única classe class Square { constructorctx, listId, length, x, y, color { ... } draw { ... } ... } que exportamos então No nós o importamos assim import { Square } from './modules/ E então use a classe para desenhar nosso quadrado let square1 = new Square 50, 50, 100, 'blue'; Módulos de agregaçãoHaverá momentos em que você desejará agregar módulos. Você pode ter vários níveis de dependências, nos quais deseja simplificar as coisas, combinando vários submódulos em um módulo pai. Isso é possível usando a sintaxe de exportação dos seguintes formulários no módulo pai export * from ' export { name } from ' Por exemplo, veja nosso module-aggregation diretório. Neste exemplo com base no exemplo de classes anteriores, temos um módulo extra chamado que agrega toda a funcionalidade de e juntos. Também movemos nossos submódulos para dentro de um subdiretório dentro do diretório modules chamado shapes. Portanto, a estrutura do módulo neste exemplo é modules/ shapes/ Em cada um dos submódulos, a exportação é da mesma forma, Em seguida, vem a parte de agregação. Dentro de incluímos as seguintes linhas export { Square } from './shapes/ export { Triangle } from './shapes/ export { Circle } from './shapes/ Eles capturam as exportações dos submódulos individuais e os disponibilizam efetivamente no módulo Nota Nota As exportações mencionadas no são basicamente redirecionadas pelo arquivo e realmente não existem nele, portanto, você não poderá escrever nenhum código relacionado útil dentro do mesmo arquivo. Portanto, agora no arquivo podemos obter acesso às três classes de módulos substituindo import { Square } from './modules/ import { Circle } from './modules/ import { Triangle } from './modules/ com a seguinte linha única import { Square, Circle, Triangle } from './modules/ Carregamento dinâmico do móduloA parte mais recente da funcionalidade dos módulos JavaScript a estar disponível nos navegadores é o carregamento dinâmico de módulos. Isso permite que você carregue módulos dinamicamente somente quando eles forem necessários, em vez de precisar carregar tudo antecipadamente. Isso tem algumas vantagens óbvias de desempenho; vamos ler e ver como isso funciona. Essa nova funcionalidade permite que você ligue import como uma função, passando o caminho para o módulo como um parâmetro. Retorna umPromise, que cumpre com um objeto de módulo consulte Creating a module object dando acesso às exportações desse objeto, import'./modules/ .thenmodule => { // Do something with the module. }; Vejamos um exemplo. No dynamic-module-imports diretório, temos outro exemplo baseado em nosso exemplo de classes. Desta vez, no entanto, não estamos desenhando nada na tela quando o exemplo é carregado. Em vez disso, incluímos trêsbuttons — "Circle", "Square", e "Triangle" — que, quando pressionado, carrega dinamicamente o módulo necessário e, em seguida, usa-o para desenhar os shape. Neste exemplo, fizemos apenas alterações em nossa e arquivos - as exportações do módulo permanecem as mesmas de antes. No pegamos uma referência a cada botão usando chamada, por exemplo let squareBtn = Em seguida, anexamos um ouvinte de evento a cada botão para que, quando pressionado, o módulo relevante seja carregado dinamicamente e usado para desenhar a formashape => { import'./modules/ => { let square1 = new 50, 50, 100, 'blue'; } }; Observe que, como o cumprimento da promessa retorna um objeto de módulo, a classe é então transformada em uma sub-característica do objeto, portanto, agora precisamos acessar o construtor com Module. anexado a ele, ... .Solução de problemasAqui estão algumas dicas que podem ajudá-lo se você estiver com problemas para fazer seus módulos funcionarem. Sinta-se livre para adicionar à lista se descobrir mais! Mencionamos isso antes, mas para reiterar precisa ser carregado com um tipo MIME de text/javascript ou outro tipo MIME compatível com JavaScript, mas text/javascript é recomendável, caso contrário, você receberá um erro estrito de verificação do tipo MIME como "O servidor respondeu com um tipo MIME não JavaScript". Se você tentar carregar o arquivo HTML localmente com um arquivo// URL, você encontrará erros do CORS devido a requisitos de segurança do módulo JavaScript. Você precisa fazer seus testes através de um servidor. As páginas do GitHub são ideais, pois também servem arquivos .js com o tipo MIME correto. Como .mjs é uma extensão de arquivo não padrão, alguns sistemas operacionais podem não reconhecê-lo ou tentar substituí-lo por outra. Por exemplo, descobrimos que o macOS estava adicionando silenciosamente .js ao final dos arquivos .mjs e ocultando automaticamente a extensão do arquivo. Então, todos os nossos arquivos foram lançados como Depois de desativarmos ocultar automaticamente as extensões de arquivo e treiná-lo para aceitar .mjs, tudo bem. Veja também Using JavaScript modules on the web, por Addy Osmani e Mathias Bynens ES modules A cartoon deep-dive, Postagem no blog Hacks por Lin Clark ES6 in Depth Modules, Publicação de blog de Hacks por Jason Orendorff Livro de Axel Rauschmayer Exploring JS Modules Previous Top 10 thư viện JavaScript bạn nên dùng qua ít nhất 1 lần1. Leaflet2. Masonry8. luận Có các thư viện JavaScript cho hầu hết mọi thứ và hơn thế nữa đang được ra mắt hầu như mỗi ngày. Nhưng với rất nhiều thư viện JavaScript để lựa chọn, thật khó để theo dõi từng thư viện và làm thế nào để bạn có thể chọn được thư viện cho phù hợp với nhu cầu của bạn. JavaScript là một trong những ngôn ngữ phổ biến nhất trên web. Mặc dù ban đầu nó chỉ được phát triển, lập trình cho các trang web, nhưng nó đã chứng kiến ​​sự phát triển theo cấp số nhân trong hai thập kỷ qua. Giờ đây, JavaScript có khả năng làm hầu hết mọi thứ và hoạt động trên một số nền tảng và thiết bị bao gồm cả IoT. Và với sự ra mắt SpaceX Dragon gần đây, JavaScript thậm chí còn ở trong không gian. Một trong những lý do cho sự phổ biến của nó là sự sẵn có của một số lượng lớn các frameworks và thư viện. Chúng giúp việc lập trình dễ dàng hơn nhiều so với việc lập trình Vanilla JS truyền thống. Trong bài viết này, chúng tôi sẽ thảo luận về 10 thư viện JavaScript phổ biến nhất mà bạn có thể sử dụng để xây dựng dự án tiếp theo của mình. 1. Leaflet Tôi thấy Leaflet là thư viện mã nguồn mở tốt nhất cho việc thêm bản đồ tương tác thân thiện với thiết bị di động vào ứng dụng của bạn. Kích thước nhỏ của nó 39kB làm cho nó trở thành một lựa chọn thay thế tuyệt vời để cân nhắc hơn so với các thư viện bản đồ khác. Với hiệu quả đa nền tảng và API được ghi chép đầy đủ, nó có mọi thứ bạn cần để khiến bạn yêu thích. Dưới đây là một số code mẫu tạo một Leaflet map var map = new { center new zoom 12, layers new };Code language JavaScript javascript Trong Leaflet, bạn cần cung cấp một lớp xếp vì không có một lớp nào theo mặc định. Nhưng điều đó cũng có nghĩa là bạn có thể chọn từ một loạt các lớp từ miễn phí đến trả phí cao cấp hơn. 2. Thư viện mã nguồn mở này giúp bạn tạo các trang web cuộn toàn màn hình như bạn có thể thấy trong GIF ở trên. Nó dễ sử dụng và có nhiều tùy chọn để tùy chỉnh, vì vậy không có gì ngạc nhiên khi nó được hàng nghìn lập trình viên sử dụng và có hơn 30 nghìn sao trên GitHub. Bạn thậm chí có thể sử dụng nó với các khuôn khổ phổ biến như react-fullpagevue-fullpageangular-fullpage Tôi đã xem qua thư viện này khoảng một năm trước và kể từ đó nó đã trở thành một trong những mục yêu thích của tôi. Đây là một trong số ít thư viện mà bạn có thể sử dụng trong hầu hết mọi dự án của mình. Nếu bạn chưa bắt đầu sử dụng thì cứ thử đi, bạn sẽ không thất vọng đâu. 3. Một trong những thư viện hoạt hình tốt nhất hiện có, rất linh hoạt và dễ sử dụng. Nó là công cụ hoàn hảo để giúp bạn thêm một số hoạt ảnh thực sự thú vị vào dự án của mình. hoạt động tốt với các thuộc tính CSS, SVG, DOM, và các JavaScript Objects và có thể dễ dàng tích hợp vào các ứng dụng của bạn. Là một lập trình viên, điều quan trọng là phải có một danh mục đầu tư tốt. Ấn tượng đầu tiên mà mọi người có về danh mục đầu tư của bạn giúp quyết định xem họ có thuê bạn hay không. Và còn công cụ nào tốt hơn thư viện này để mang lại sức sống cho danh mục đầu tư của bạn. Nó sẽ không chỉ nâng cao trang web của bạn mà còn giúp thể hiện các kỹ năng thực tế. 4. Tôi đã xem qua thư viện này khi đang tìm cách triển khai tính năng toàn màn hình trong dự án của mình. Nếu bạn cũng muốn có tính năng toàn màn hình, tôi khuyên bạn nên sử dụng thư viện này thay vì Fullscreen API vì tính hiệu quả trên nhiều trình duyệt của nó mặc dù nó được xây dựng trên nền tảng đó. Nó nhỏ đến mức bạn thậm chí sẽ không nhận ra nó – chỉ khoảng 0,7kB được nén lại. 5. Làm việc với ngày và giờ có thể là một khó khăn lớn, đặc biệt là với các lệnh gọi API, các múi giờ khác nhau, ngôn ngữ địa phương, có thể giúp bạn giải quyết tất cả những vấn đề đó cho dù đó là thao tác, xác thực, phân tích cú pháp hay định dạng ngày hoặc giờ. Có rất nhiều phương pháp thú vị thực sự hữu ích cho các dự án của bạn. Ví dụ tôi đã sử dụng phương pháp .fromNow này trong một trong những dự án blog của mình để hiển thị thời gian bài báo được xuất bản. const moment = require'moment'; relativeTimeOfPost = moment[2019, 07, 13].fromNow; // a year ago Code language JavaScript javascript Mặc dù tôi không sử dụng nó thường xuyên, nhưng tôi rất hâm mộ sự ủng hộ của nó đối với việc quốc tế hóa. Ví dụ, bạn có thể tùy chỉnh kết quả trên bằng phương pháp .locale này. // French relativeTimeOfPostInFrench = moment[2019, 07, 13].fromNow; //il y a un an // Spanish relativeTimeOfPostInSpanish = moment[2019, 07, 13].fromNow; //hace un añoCode language JavaScript javascript 6. là một thư viện JavaScript nhẹ cho phép bạn thêm các cử chỉ đa chạm vào Ứng dụng web của mình. Tôi muốn giới thiệu thư viện JavaScript này để thêm một số thú vị cho các thành phần của bạn. Đây là một ví dụ để bạn tập chơi khi rảnh rỗi. Chỉ cần chạy bút và nhấn hoặc nhấp vào div màu xám. Nó có thể nhận dạng các cử chỉ được thực hiện bằng cách chạm, dùng chuột và pointerEvents. Đối với người dùng jQuery, tôi khuyên bạn nên sử dụng jQuery plugin. $element.hammeroptions.bind"pan", myPanHandler;Code language JavaScript javascript 7. Masonry Masonry là một thư viện bố cục lưới JavaScript. Nó thật tuyệt vời và tôi sử dụng nó cho nhiều dự án của mình. Nó có thể lấy các phần tử lưới đơn giản của bạn và đặt chúng dựa trên không gian thẳng đứng có sẵn, giống như cách các anh thợ xây đang đặt đá hoặc gạch để tạo thành một bức tường. Bạn có thể sử dụng thư viện này để hiển thị các dự án của mình theo một cách khác. Sử dụng nó với thẻ, hình ảnh, phương thức, Đây là một ví dụ đơn giản để cho bạn thấy điều kỳ diệu trong hành động. Chà, không chính xác là ma thuật, mà là cách bố cục thay đổi khi bạn phóng to trên trang web. Và đây là code cho phần trên var elem = var msnry = new Masonry elem, { itemSelector '.grid-item', columnWidth 400 }; var msnry = new Masonry '.grid';Code language JavaScript javascript 8. Nếu bạn là một lập trình viên mê dữ liệu thì thư viện này là dành cho bạn. Tôi vẫn chưa tìm thấy một thư viện thao tác dữ liệu hiệu quả và đẹp mắt như D3. Với hơn 92k sao trên GitHub, D3 là thư viện trực quan hóa dữ liệu yêu thích của nhiều lập trình viên hiện nay. Gần đây tôi đã sử dụng D3 để trực quan hóa dữ liệu COVID-19 với React và Kho lưu trữ dữ liệu CSSE của Johns Hopkins trên GitHub . Đó là một dự án thực sự thú vị, và nếu bạn đang nghĩ đến việc làm điều gì đó tương tự, tôi khuyên bạn nên thử 9. slick Slick hoàn toàn đáp ứng, hỗ trợ vuốt, vòng lặp vô hạn và hơn thế nữa. Như đã đề cập trên trang chủ, nó thực sự là băng chuyền cuối cùng mà bạn cần. Tôi đã sử dụng thư viện này được một thời gian, và nó đã giúp tôi tiết kiệm rất nhiều thời gian. Chỉ với một vài dòng code, bạn có thể thêm rất nhiều tính năng vào băng chuyền của mình. $'.autoplay'.slick{ slidesToShow 3, slidesToScroll 1, autoplay true, autoplaySpeed 2000, };Code language JavaScript javascript là một thư viện JavaScript nhẹ ~ 3 kB với không phụ thuộc hay cung cấp một công cụ định vị đáng tin cậy và có thể mở rộng mà bạn có thể sử dụng để đảm bảo tất cả các phần tử popper của bạn được định vị ở đúng vị trí. Việc dành thời gian định cấu hình các phần tử popper có vẻ không quan trọng, nhưng những điều nhỏ nhặt này lại là thứ khiến bạn nổi bật với tư cách là một lập trình viên. Và với kích thước nhỏ như vậy nó không chiếm nhiều diện tích. Kết luận Là một lập trình viên, việc có và sử dụng các thư viện JavaScript phù hợp là rất quan trọng. Nó sẽ giúp bạn làm việc hiệu quả hơn và sẽ giúp cho việc lập trình trở nên dễ dàng và nhanh chóng hơn nhiều. Cuối cùng, tùy theo nhu cầu của bạn mà chọn thư viện nào. Đây là 10 thư viện JavaScript mà bạn có thể thử và bắt đầu sử dụng trong các dự án của mình ngay hôm nay. Bạn sử dụng thư viện JavaScript thú vị nào khác? Bạn có muốn một bài báo khác như thế này không? Hãy bình luận ben dưới cho chúng tôi biết nhé! Cảm ơn bạn đã theo dõi bài viết! Các bạn có thể tham khảo các bài viết hay về JavaScript tại đây. Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm. TỔNG HỢP TÀI LIỆU HỌC LẬP TRÌNH CƠ BẢN CHO NGƯỜI MỚI BẮT ĐẦUKHOÁ HỌC BOOTCAMP JAVA/JAVASCRIPT/PHP TRỞ THÀNH LẬP TRÌNH VIÊN TRONG 5-6 THÁNG Classes em JavaScript são introduzidas no ECMAScript 2015 e são simplificações da linguagem para as heranças baseadas nos protótipos. A sintaxe para classes não introduz um novo modelo de herança de orientação a objetos em JavaScript. Classes em JavaScript provêm uma maneira mais simples e clara de criar objetos e lidar com classesAs Classes são, de fato, "funções especiais", e, assim como você pode definir "function expressions" e "function declarations", a sintaxe de uma classe possui dois componentes "class expressions" e "class declarations".Declarando classesUma maneira de definir uma classe é usando uma declaração de classe. Para declarar uma classe, você deve usar a palavra-chave class seguida pelo nome da classe aqui "Retangulo". class Retangulo { constructoraltura, largura { = altura; = largura; } } Uso antes da declaração Hoisting - Tradução Literal Lançamento Uma diferença importante entre declarações de funções das declarações de classes, é que declararações de funções são hoisted e declarações de classes não são. Primeiramente deve declarar sua classe para só então acessá-la, pois do contrário o código a seguir irá lançar uma exceção ReferenceError const p = new Retangulo; // Erro de referência ReferenceError class Retangulo {} Expressões de ClassesUma Expressão de Classe class expression é outra forma para definir classes. Expressões de Classes podem possuir nomes ou não anônimas. O nome dado para uma expressão de classe é local ao corpo da classe. // sem nome let Retangulo = class { constructoraltura, largura { = altura; = largura; } }; // nomeada let Retangulo = class Retangulo { constructoraltura, largura { = altura; = largura; } }; Nota As expressões de classe também sofrem com o mesmo problema de hoisted mencionados em declarações de de uma classe e definições de métodosO corpo de uma classe é a parte que está entre chaves {}. É aí onde você define os membros da classe, como os métodos, ou os Estrito strict modeOs corpos das Declarações de Classes e das Expressões de Classes são executados em modo método constructor é um tipo especial de método para criar e iniciar um objeto criado pela classe. Só pode existir um método especial com o nome "constructor" dentro da classe. Um erro de sintaxe SyntaxError en-US será lançado se a classe possui mais do que uma ocorrência do método constructor. Um construtor pode usar a palavra-chave super para chamar o construtor de uma classe ProtótiposVeja também definições de métodos method definitions. class Retangulo { constructoraltura, largura { = altura; = largura; } //Getter get area { return } calculaArea { return * } } const quadrado = new Retangulo10, 10; Métodos estáticosA palavra-chave static define um método estático de uma classe. Métodos estáticos são chamados sem a instanciação da sua classe e não podem ser chamados quando a classe é instanciada. Métodos estáticos são geralmente usados para criar funções de utilidades por uma aplicação. class Ponto { constructorx, y { = x; = y; } static distanciaa, b { const dx = - const dy = - return dy; } } const p1 = new Ponto5, 5; const p2 = new Ponto10, 10; //undefined //undefined p2; Empacotando com protótipos e métodos estáticosQuando um método estático ou protótipo é chamado sem um objeto "this" configurado ou com "this" como boolean, string, number, undefined ou null, então o valor "this" será undefined dentro da função chamada. Autoboxing não vai acontecer. O comportamento será o mesmo se escrevemos o código no modo não-estrito. class Animal { falar { return this; } static comer { return this; } } let obj = new Animal; // Animal {} let falar = falar; // undefined // class Animal let comer = comer; // undefined Se escrevemos o código acima usando classes baseadas em função tradicional, então o autoboxing acontecerá com base no valor de "this" para o qual a função foi chamada. function Animal { } = function { return this; } = function { return this; } let obj = new Animal; let falar = falar; // objeto global let comer = comer; // objeto global Propriedades de instânciaPropriedades de instâncias devem ser definidas dentro dos métodos da classe class Retangulo { constructoraltura, largura { = altura; = largura; } } Propriedades de dados estáticos e propriedades de dados prototipados prototype devem ser definidos fora da declaração do corpo da classe. = 20; = 25; Sub classes com o extendsA palavra-chave extends é usada em uma declaração de classe, ou em uma expressão de classe para criar uma classe como filha de uma outra classe. class Animal { constructornome { = nome; } falar { + ' emite um barulho.'; } } class Cachorro extends Animal { falar { + ' latidos.'; } } let cachorro = new Cachorro'Mat'; Se existir um contrutor nas subclasses, é necessário primeiro chamar super antes de usar a keyword "this". Também é possivel ampliar extends "classes" baseadas em funções tradicionais. function Animal nome { = nome; } = function { + ' faça barulho.'; } class Cachorro extends Animal { falar { + ' lati.'; } } let cachorro = new Cachorro'Mitzie'; // Mitzie lati. Note que classes não extendem objetos normais não construíveis. Se você quer herdar de um objeto, é necessário utilizar let Animal = { falar { + ' faça barulho.'; } }; class Cachorro { constructornome { = nome; } } Animal; let cachorro = new Cachorro'Mitzie'; //Mitzie faça barulho. SpeciesVocê pode querer retornar um objeto Array na sua classe MinhaArray derivada de array. O padrão Species permite a sobrescrita do construtor padrão. Por exemplo, quando utilizando um método como map que retorna o construtor padrão, você pode querer que esse método retorne um objeto Array ao invés do objeto MinhaArray. O te permite fazer isso class MinhaArray extends Array { // Sobrescreve species para o construtor da classe pai Array static get [ { return Array; } } let a = new MinhaArray1,2,3; let mapped = => x * x; instanceof MyArray; // false instanceof Array; // true Chamada da classe pai com superA palavra-chave keyword super é utilizada para chamar funções que pertencem ao pai do objeto. class Gato { constructornome { = nome; } falar { + ' faça barulho.'; } } class Leao extends Gato { falar { + ' roars.'; } } let leao = new Leao'Fuzzy'; // Fuzzy faça barulho. // Fuzzy roars. Mix-insSubclasses abstratas ou mix-ins são templates para classes. Uma classe do ECMAScript pode apenas ter uma classe pai, assim sendo, não é possível a classe ter herança múltipla. Para se ter um comportamento similar ao de herança múltipla no ECMAScript usa-se mix-ins, uma forma de implementar mix-ins é usar um template de subclasse que é uma função que instancia uma classe base e retorna uma subclasse extendida desta classe base class Humano { constructornome { = nome; } andar { return andou um passo' } } const HumanoFalante = Base => class extends Base { falar { return diz olá mundo!' } } const HumanoFalanteMixado = Base => class extends Base {} const HumanoFinal = HumanoFalanteMixadoHumanoFalanteHumano const humano = new HumanoFinal'Bill Gates' EspecificaçõesCompatibilidade com navegadoresBCD tables only load in the browserRodando com ScratchpadUma classe não pode ser redefinida. Se você estiver rodando código com Scratchpad Menu do Firefox Ferramentas > Web Developer > Scratchpad e você acionar 'Run' a uma definição de uma classe com o mesmo nome duas vezes, você verá um confuso SyntaxError redeclaration of let Erro de Sintaxe redeclaração de let . Para reacionar re-run uma definição, use o menu do Scratchpad em Execute > Reload and Run Executar > Atualizar e Rodar. Por favor, vote no bug 1428672. Veja também

js model thành viên