国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
#CommonJS" >#CommonJS
AMD" >AMD
UMD" >UMD
CMD" >CMD
微信小程序模塊化機(jī)制" >微信小程序模塊化機(jī)制
模塊開發(fā)" >模塊開發(fā)
模塊運(yùn)行" >模塊運(yùn)行
使用第三方模塊" >使用第三方模塊
ECMAScript 6模塊系統(tǒng)" >ECMAScript 6模塊系統(tǒng)
首頁(yè) 微信小程式 微信開發(fā) 微信開發(fā)實(shí)戰(zhàn)之模組化的實(shí)例詳解

微信開發(fā)實(shí)戰(zhàn)之模組化的實(shí)例詳解

May 31, 2017 pm 04:26 PM

JavaScript模組規(guī)格

在任何一個(gè)大型應(yīng)用程式中模組化是很常見(jiàn)的,與一些更傳統(tǒng)的程式語(yǔ)言不同的是,JavaScript (ECMA-262版本)還不支援原生的模組化。

Javascript社群做了很多努力,在現(xiàn)有的運(yùn)作環(huán)境中,實(shí)現(xiàn)"模組"的效果。通行的JavaScript模組規(guī)格主要有兩種:CommonJS、AMD、UMD、CMD等

#CommonJS

CommonJS規(guī)格是伺服器端Javascript模組規(guī)格。

Node.js的模組系統(tǒng),就是參考CommonJS規(guī)格實(shí)現(xiàn)的。 NPM也遵循了commonJS定義的包規(guī)範(fàn),從而形成了一套完整的生態(tài)系統(tǒng)。

CommonJS定義的模組分為:{模組引用(require)} {模組定義(exports)} {模組識(shí)別(module)}。 require()用來(lái)引入外部模組;exports物件用於導(dǎo)出當(dāng)前模組的方法或變量,唯一的導(dǎo)出口;module物件代表模組本身。

CommonJS規(guī)格wiki.commonjs.org/wiki...

function MathClass() {
}
MathClass.PI = 3.14;
MathClass.E = 2.72;
MathClass.prototype.add = function(a, b) { return a+b;
}; module.exports = MathClass;
var MathClass = require('./mathCommonJS.js');
Page( {
    onLoad: function() { console.log( "PI: " +MathClass.PI ); var mathClass = new MathClass(); console.log( "3 + 4: " +mathClass.add(3, 4) );
    }
});

AMD

AMD是"Asynchronous Module Definition"的縮寫,意思是"非同步模組定義",是前端模組規(guī)範(fàn)。

RequireJS就是實(shí)作了AMD規(guī)範(fàn)的呢。

AMD規(guī)格定義了一個(gè)自由變數(shù)或全域變數(shù) define 的函數(shù)。

define( id?, dependencies?, factory );
  • id ??為字串類型,表示了模組標(biāo)識(shí),為可選參數(shù)。若不存在則模組標(biāo)識(shí)應(yīng)該預(yù)設(shè)定義為在載入器中被請(qǐng)求腳本的標(biāo)識(shí)。如果存在,那麼模組標(biāo)識(shí)必須為頂層的或一個(gè)絕對(duì)的標(biāo)識(shí)。

  • dependencies ,是一個(gè)目前模組依賴的,已被模組定義的模組標(biāo)識(shí)的陣列字面量。

  • factory,是一個(gè)需要進(jìn)行實(shí)例化的函數(shù)或一個(gè)物件。

AMD規(guī)格?github.com/amdjs/amdj...

define('mathAMD', [], function( i ) { function MathClass() {
    }
    MathClass.PI = 3.14;
    MathClass.E = 2.72;
    MathClass.prototype.add = function( a, b ) { return a + b;
    }; return MathClass;
});
define( [ "mathAMD" ], function( require, exports, MathClass ) {
    Page( {
        onLoad: function() { console.log( "PI: " + MathClass.PI ); var mathClass = new MathClass(); console.log( "3 + 4: " + mathClass.add( 3, 4 ) );
        }
    });

});

UMD

CommonJS module以伺服器端為第一的原則發(fā)展,選擇同步載入模組。它的模組是無(wú)需包裝的,但它僅支援物件類型(objects)模組。 AMD以瀏覽器為第一(browser-first)的原則發(fā)展,選擇非同步載入模組。它的模組支援物件、函數(shù)、建構(gòu)器、字串、JSON等各種類型的模組,因此在瀏覽器中它非常靈活。這迫使人們想出另一種更通用格式 UMD(Universal Module Definition),希望提供一個(gè)前後端跨平臺(tái)的解決方案。

(function (root, factory) { if (typeof define === 'function' && define.amd) {       
        define(['jquery'], factory);
    } else if (typeof exports === 'object') { module.exports = factory(require('jquery'));
    } else {       
        root.returnExports = factory(root.jQuery);
    }
}(this, function ($) { function myFunc(){}; return myFunc;
}));

UMD的實(shí)作很簡(jiǎn)單,先判斷是否支援AMD(define是否存在),存在則使用AMD方式載入模組。再判斷是否支援Node.js模組格式(exports是否存在),存在則使用Node.js模組格式。前兩者都不存在,則將模組公開到全域(window或global)。

( function( global, factory ) { if( typeof define === 'function' && define.amd ) {
        define( factory );
    } else if( typeof exports === 'object' ) { module.exports = factory();
    } else {
        root.returnExports = factory();
    }
    
} ( this, function() { function MathClass() {
    }
    MathClass.PI = 3.14;
    MathClass.E = 2.72;
    MathClass.prototype.add = function( a, b ) { return a + b;
    }; return MathClass;
}) );
var MathClass = require( './mathUMD.js' );
Page( {
    onLoad: function() { console.log( "PI: " + MathClass.PI ); var mathClass = new MathClass(); console.log( "3 + 4: " + mathClass.add( 3, 4 ) );
    }
});

CMD

CMD 即Common Module Definition通用模塊定義,CMD規(guī)范是國(guó)內(nèi)發(fā)展出來(lái)的,就像AMD有個(gè)requireJS,CMD有個(gè)瀏覽器的實(shí)現(xiàn)SeaJS,SeaJS要解 決的問(wèn)題和requireJS一樣,只不過(guò)在模塊定義方式和模塊加載(可以說(shuō)運(yùn)行、解析)時(shí)機(jī)上有所不同。

Sea.js 推崇一個(gè)模塊一個(gè)文件,遵循統(tǒng)一的寫法

define(id?, deps?, factory)

因?yàn)镃MD推崇一個(gè)文件一個(gè)模塊,所以經(jīng)常就用文件名作為模塊id,CMD推崇依賴就近,所以一般不在define的參數(shù)中寫依賴,在factory中寫。

factory是一個(gè)函數(shù),有三個(gè)參數(shù),function(require, exports, module)

  • require 是一個(gè)方法,接受 模塊標(biāo)識(shí) 作為唯一參數(shù),用來(lái)獲取其他模塊提供的接口

  • exports 是一個(gè)對(duì)象,用來(lái)向外提供模塊接口

  • module 是一個(gè)對(duì)象,上面存儲(chǔ)了與當(dāng)前模塊相關(guān)聯(lián)的一些屬性和方法

CMD模塊規(guī)范 https://github.com/cmdjs/spec...

define( "pages/module/mathCMD.js", function( require, exports, module ) { function MathClass() {
    }
    MathClass.PI = 3.14;
    MathClass.E = 2.72;
    MathClass.prototype.add = function( a, b ) { return a + b;
    }; module.exports = MathClass;
})
define( "pages/module/mathCMD.js", function( require, exports, module ) { function MathClass() {
    }
    MathClass.PI = 3.14;
    MathClass.E = 2.72;
    MathClass.prototype.add = function( a, b ) { return a + b;
    }; module.exports = MathClass;
})

微信小程序模塊化機(jī)制

微信小程序秉承了JavaScript模塊化的機(jī)制,通過(guò)module.exports暴露對(duì)象,通過(guò)require來(lái)獲取對(duì)象。

模塊開發(fā)

以微信小程序QuickStart為例,微信小程序模塊采用CommonJS規(guī)范

utils/util.js

function formatTime(date) { var year = date.getFullYear() var month = date.getMonth() + 1 var day = date.getDate() var hour = date.getHours() var minute = date.getMinutes() var second = date.getSeconds(); return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
} function formatNumber(n) {
  n = n.toString() return n[1] ? n : '0' + n
} module.exports = {
  formatTime: formatTime
}

pages/log/log.js

var util = require('../../utils/util.js')
Page({
  data: {
    logs: []
  },
  onLoad: function () { this.setData({
      logs: (wx.getStorageSync('logs') || []).map(function (log) { return util.formatTime(new Date(log))
      })
    })
  }
})

模塊運(yùn)行

微信小程序還是要以前端程序方式在微信瀏覽器中運(yùn)行,由于CommonJS規(guī)范是服務(wù)器端模塊規(guī)范,微信小程序運(yùn)行時(shí)會(huì)自動(dòng)轉(zhuǎn)換為前端模塊規(guī)范。

以微信小程序QuickStart調(diào)試時(shí)代碼為例

utils/util.js

define("utils/util.js", function(require, module) { var window = { Math: Math }/*兼容babel*/ , location, document, navigator, self, localStorage, history, Caches; function formatTime(date) { var year = date.getFullYear() var month = date.getMonth() + 1 var day = date.getDate() var hour = date.getHours() var minute = date.getMinutes() var second = date.getSeconds(); return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
    } function formatNumber(n) {
        n = n.toString() return n[1] ? n : '0' + n
    } module.exports = {
        formatTime: formatTime
    }
})

pages/log/log.js

define("pages/logs/logs.js", function(require, module) { var window = { Math: Math }/*兼容babel*/ , location, document, navigator, self, localStorage, history, Caches; var util = require('../../utils/util.js')
    Page({
        data: {
            logs: []
        },
        onLoad: function() { this.setData({
                logs: (wx.getStorageSync('logs') || []).map(function(log) { return util.formatTime(new Date(log))
                })
            })
        }
    })
}); require("pages/logs/logs.js")

微信小程序運(yùn)行的代碼與CMD模塊規(guī)范基本符合。

使用第三方模塊

微信小程序運(yùn)行環(huán)境exports、module沒(méi)有定義,無(wú)法通過(guò)require導(dǎo)入模塊,需要對(duì)第三方模塊強(qiáng)制導(dǎo)出后才能正常導(dǎo)入。

微信小程序使用Immutable.js segmentfault.com/a/11...

微信小程序使用Underscore.js segmentfault.com/a/11...

ECMAScript 6模塊系統(tǒng)

ECMAScript 6,模塊被作為重要組成部分加入其中。

ES6的模塊提供了2個(gè)新的語(yǔ)法,分別是export和import。

export 模塊導(dǎo)出

export let a = 1; export class A {}; export let b = () => {};

import 模塊導(dǎo)入

import {a} from './a'; console.log(a); import * as obj from './a'; console.log(obj.a);

微信小程序還沒(méi)實(shí)現(xiàn)ECMAScript 6。

【相關(guān)推薦】

1. 微信公眾號(hào)平臺(tái)源碼下載

2.?分享微信公眾號(hào)開發(fā)刷卡支付的實(shí)例教程

3.?微信開發(fā)之微信支付

4.?詳解微信小程序支付功能開發(fā)錯(cuò)誤總結(jié)

以上是微信開發(fā)實(shí)戰(zhàn)之模組化的實(shí)例詳解的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
如何優(yōu)化Java程式碼的可維護(hù)性:經(jīng)驗(yàn)與建議 如何優(yōu)化Java程式碼的可維護(hù)性:經(jīng)驗(yàn)與建議 Nov 22, 2023 pm 05:18 PM

如何優(yōu)化Java程式碼的可維護(hù)性:經(jīng)驗(yàn)與建議在軟體開發(fā)過(guò)程中,編寫具有良好可維護(hù)性的程式碼是至關(guān)重要的??删S護(hù)性意味著程式碼能夠被輕鬆理解、修改和擴(kuò)展,而不會(huì)引發(fā)意外的問(wèn)題或額外的工作量。對(duì)於Java開發(fā)者來(lái)說(shuō),如何優(yōu)化程式碼的可維護(hù)性是一個(gè)重要課題。本文將分享一些經(jīng)驗(yàn)和建議,幫助Java開發(fā)者提升其程式碼的可維護(hù)性。遵循規(guī)範(fàn)的命名規(guī)則規(guī)範(fàn)的命名規(guī)則能夠使程式碼更易讀,

如何解決Python的程式碼中的程式碼複雜度過(guò)高錯(cuò)誤? 如何解決Python的程式碼中的程式碼複雜度過(guò)高錯(cuò)誤? Jun 24, 2023 pm 05:43 PM

Python是一門簡(jiǎn)單易學(xué)高效的程式語(yǔ)言,但當(dāng)我們?cè)诰帉慞ython程式碼時(shí),可能會(huì)遇到一些程式碼複雜度過(guò)高的問(wèn)題。這些問(wèn)題如果不解決,會(huì)使得程式碼難以維護(hù),容易出錯(cuò),降低程式碼的可讀性和可擴(kuò)充性。因此,在本文中,我們將討論如何解決Python程式碼中的程式碼複雜度過(guò)高錯(cuò)誤。了解程式碼複雜度程式碼複雜度是一種度量程式碼難以理解和維護(hù)的性質(zhì)。在Python中,有一些指標(biāo)可以用

如何解決Python的程式碼的可維護(hù)性差錯(cuò)誤? 如何解決Python的程式碼的可維護(hù)性差錯(cuò)誤? Jun 25, 2023 am 11:58 AM

Python作為一門高階程式語(yǔ)言,在軟體開發(fā)中得到了廣泛應(yīng)用。雖然Python有許多優(yōu)點(diǎn),但許多Python程式設(shè)計(jì)師經(jīng)常面臨的問(wèn)題是,程式碼的可維護(hù)性較差。 Python程式碼的可維護(hù)性包括程式碼的易讀性、可擴(kuò)充性、可重複使用性等面向。在本篇文章中,我們將著重討論如何解決Python程式碼的可維護(hù)性差的問(wèn)題。一、代碼的易讀性代碼可讀性是指代碼的易讀程度,它是代碼可維護(hù)性的核

Vue大型專案中實(shí)作模組化開發(fā)指南 Vue大型專案中實(shí)作模組化開發(fā)指南 Jun 09, 2023 pm 04:07 PM

在現(xiàn)代化的網(wǎng)路開發(fā)中,Vue作為一款靈活、易上手且功能強(qiáng)大的前端框架,被廣泛應(yīng)用於各種網(wǎng)站和應(yīng)用程式的開發(fā)中。在開發(fā)大型專案時(shí),如何簡(jiǎn)化程式碼的複雜度,讓專案更容易維護(hù),是每個(gè)開發(fā)者都必須面對(duì)的問(wèn)題。而模組化開發(fā),可以幫助我們更好地組織程式碼,提高開發(fā)效率和程式碼可讀性。下面,我將分享一些在Vue大型專案中實(shí)現(xiàn)模組化開發(fā)的經(jīng)驗(yàn)和指南:1.分工明確在一個(gè)大型專案中

PHP微信開發(fā):如何實(shí)作訊息加密解密 PHP微信開發(fā):如何實(shí)作訊息加密解密 May 13, 2023 am 11:40 AM

PHP是一種開源的腳本語(yǔ)言,廣泛應(yīng)用於網(wǎng)頁(yè)開發(fā)和伺服器端編程,尤其在微信開發(fā)中得到了廣泛的應(yīng)用。如今,越來(lái)越多的企業(yè)和開發(fā)者開始使用PHP進(jìn)行微信開發(fā),因?yàn)樗蔀榱苏嬲囊讓W(xué)易用的開發(fā)語(yǔ)言。在微信開發(fā)中,訊息的加密和解密是一個(gè)非常重要的問(wèn)題,因?yàn)樗鼈兩婕百Y料的安全性。對(duì)於沒(méi)有加密和解密方式的消息,駭客可以輕鬆取得其中的數(shù)據(jù),對(duì)用戶造成威脅

如何解決Python的程式碼的可擴(kuò)充性差錯(cuò)誤? 如何解決Python的程式碼的可擴(kuò)充性差錯(cuò)誤? Jun 25, 2023 am 09:51 AM

Python作為一門高階程式語(yǔ)言,廣泛應(yīng)用於資料分析、機(jī)器學(xué)習(xí)、Web開發(fā)等領(lǐng)域。然而,隨著程式碼規(guī)模不斷擴(kuò)大,Python程式的可擴(kuò)展性問(wèn)題也逐漸顯現(xiàn)出來(lái)。可擴(kuò)展性差錯(cuò)誤是指Python程式在某些情況下無(wú)法很好地適應(yīng)需求變化,無(wú)法對(duì)大規(guī)模資料進(jìn)行處理,導(dǎo)致程式運(yùn)作效果不佳。太多的依賴、糟糕的程式碼結(jié)構(gòu)、缺乏文件等都是Python程式可擴(kuò)展性差錯(cuò)誤的罪魁禍?zhǔn)住?/p>

超恩推出 TGS-1000 系列工業(yè)迷你主機(jī):支援堆疊介面擴(kuò)充模組,搭載 MTL 處理器 超恩推出 TGS-1000 系列工業(yè)迷你主機(jī):支援堆疊介面擴(kuò)充模組,搭載 MTL 處理器 Aug 14, 2024 pm 01:33 PM

本站8月14日消息,超恩Vecow北京時(shí)間7月22日推出了搭載英特爾酷睿Ultra第一代處理器的TGS-1000系列工業(yè)迷你主機(jī)。此系列產(chǎn)品的特色在於支援垂直堆疊擴(kuò)展出額外I/O連接埠。 TGS-1000系列分為TGS-1000與TGS-1500兩款型號(hào),差別在於TGS-1500底包含支援MXM顯示卡的模組,可選配英特爾銳炫A370M或至高RTX5000Ada行動(dòng)版的英偉達(dá)專業(yè)卡。 ▲TGS-1500TGS-1000系列迷你主機(jī)可選配英特爾酷睿Ultra7165H或Ultra5135H處理器,配備雙D

vue中什麼是模組化 vue中什麼是模組化 Dec 23, 2022 pm 06:06 PM

在vue中,模組化就是把單獨(dú)的一個(gè)功能封裝到一個(gè)模組(檔案)中,模組之間相互隔離,但是可以透過(guò)特定的介面公開內(nèi)部成員,也可以依賴別的模組(方便程式碼的重用,從而提升開發(fā)效率,並且方便後期的維護(hù))。模組化開發(fā)的好處:1、條理清晰,便於維護(hù);2、不會(huì)一次將所有資料請(qǐng)求回來(lái),使用者體驗(yàn)感好;3、模組之間相互隔離,但是可以透過(guò)特定的介面公開內(nèi)部成員,也可以依賴別的模組。

See all articles