本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及一種腳本封裝方法和裝置以及腳本運(yùn)行方法和裝置。
背景技術(shù):
隨著瀏覽器技術(shù)的發(fā)展,JavaScript解析速度得到大幅提升,基于JavaScript技術(shù)開發(fā)的腳本越來(lái)越流行。在實(shí)際應(yīng)用場(chǎng)景中,隨著腳本中代碼量的增加,腳本封裝對(duì)于腳本運(yùn)行至關(guān)重要。
現(xiàn)有技術(shù)中,在腳本封裝中,腳本中的代碼以類的形式存在。例如,腳本M以3個(gè)類的形式進(jìn)行封裝。
但是,當(dāng)腳本的代碼量較高時(shí),一般需要通過(guò)多個(gè)類的形式進(jìn)行封裝,各個(gè)類之間存在耦合,導(dǎo)致腳本結(jié)構(gòu)不清晰。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供了一種腳本封裝方法和裝置以及腳本運(yùn)行方法和裝置,能夠使腳本結(jié)構(gòu)更加清晰。
第一方面,本發(fā)明實(shí)施例提供了一種腳本封裝方法,包括:
接收外部發(fā)送的至少一個(gè)模塊參數(shù),每一個(gè)所述模塊參數(shù)中包括:模塊的名稱、至少一個(gè)所述模塊所依賴的模塊的名稱;
針對(duì)每一個(gè)所述模塊參數(shù),根據(jù)當(dāng)前模塊參數(shù),創(chuàng)建當(dāng)前模塊對(duì)象,所述當(dāng)前模塊對(duì)象中包括:所述當(dāng)前模塊對(duì)象的名稱、至少一個(gè)所述當(dāng)前模塊對(duì)象所依賴的模塊對(duì)象的名稱;
在每一個(gè)所述模塊對(duì)象中,定義至少一個(gè)類;
根據(jù)至少一個(gè)所述模塊對(duì)象和每一個(gè)所述模塊對(duì)象中所述至少一個(gè)類,生成目標(biāo)腳本。
優(yōu)選地,
所述在每一個(gè)所述模塊對(duì)象中,定義至少一個(gè)類,包括:
在目標(biāo)模塊對(duì)象中,接收外部發(fā)送的針對(duì)所述目標(biāo)模塊對(duì)象的至少一個(gè)目標(biāo)類參數(shù),每一個(gè)所述目標(biāo)類參數(shù)中包括:目標(biāo)基類、目標(biāo)類的名稱、所述目標(biāo)類的繼承關(guān)系和所述目標(biāo)類的依賴關(guān)系;
針對(duì)每一個(gè)所述目標(biāo)類參數(shù),根據(jù)當(dāng)前目標(biāo)類參數(shù)中的所述目標(biāo)基類、所述目標(biāo)類的名稱、所述目標(biāo)類的繼承關(guān)系和所述目標(biāo)類的依賴關(guān)系,在所述目標(biāo)模塊對(duì)象中,定義當(dāng)前目標(biāo)類。
第二方面,本發(fā)明實(shí)施例提供了一種腳本封裝裝置,包括:
模塊定義接口,用于接收外部發(fā)送的至少一個(gè)模塊參數(shù),每一個(gè)所述模塊參數(shù)中包括:模塊的名稱、至少一個(gè)所述模塊所依賴的模塊的名稱;針對(duì)每一個(gè)所述模塊參數(shù),根據(jù)當(dāng)前模塊參數(shù),創(chuàng)建當(dāng)前模塊對(duì)象,所述當(dāng)前模塊對(duì)象中包括:所述當(dāng)前模塊對(duì)象的名稱、至少一個(gè)所述當(dāng)前模塊對(duì)象所依賴的模塊對(duì)象的名稱;
類定義接口,用于在所述模塊定義接口創(chuàng)建的每一個(gè)所述模塊對(duì)象中,定義至少一個(gè)類;
生成接口,用于根據(jù)所述模塊定義接口創(chuàng)建的所述至少一個(gè)模塊對(duì)象和每一個(gè)所述模塊對(duì)象中所述類定義接口定義的所述至少一個(gè)類,生成目標(biāo)腳本。
優(yōu)選地,
所述類定義接口,用于在目標(biāo)模塊對(duì)象中,接收外部發(fā)送的針對(duì)所述目標(biāo)模塊對(duì)象的至少一個(gè)目標(biāo)類參數(shù),每一個(gè)所述目標(biāo)類參數(shù)中包括:目標(biāo)基類、目標(biāo)類的名稱、所述目標(biāo)類的繼承關(guān)系、所述目標(biāo)類的依賴關(guān)系;針對(duì)每一個(gè)所述目標(biāo)類參數(shù),根據(jù)當(dāng)前目標(biāo)類參數(shù)中的所述目標(biāo)基類、所述目標(biāo)類的名稱和所述目標(biāo)類的繼承關(guān)系和所述目標(biāo)類的依賴關(guān)系,在所述目標(biāo)模塊對(duì)象中,定義當(dāng)前目標(biāo)類。
第三方面,本發(fā)明實(shí)施例提供了一種腳本運(yùn)行方法,預(yù)先創(chuàng)建至少一個(gè)模塊對(duì)象,每一個(gè)所述模塊對(duì)象中包括:當(dāng)前模塊對(duì)象的名稱、至少一個(gè)所述當(dāng)前模塊對(duì)象所依賴的模塊對(duì)象的名稱;預(yù)先在每一個(gè)所述模塊對(duì)象中,定義至少一個(gè)類;根據(jù)所述至少一個(gè)模塊對(duì)象和每一個(gè)所述模塊對(duì)象中所述至少一個(gè)類,生成目標(biāo)腳本,還包括:
接收外部發(fā)送的針對(duì)所述目標(biāo)腳本的目標(biāo)模塊對(duì)象的名稱;
根據(jù)所述目標(biāo)模塊對(duì)象的名稱,在所述至少一個(gè)模塊對(duì)象中確定所述目標(biāo)模塊對(duì)象;
根據(jù)所述目標(biāo)模塊對(duì)象和至少一個(gè)所述目標(biāo)模塊對(duì)象所依賴的模塊對(duì)象的名稱,確定待處理的模塊對(duì)象;
對(duì)每一個(gè)所述待處理的模塊對(duì)象中的每一個(gè)類進(jìn)行實(shí)例化。
優(yōu)選地,
所述根據(jù)所述目標(biāo)模塊對(duì)象和至少一個(gè)所述目標(biāo)模塊對(duì)象所依賴的模塊對(duì)象的名稱,確定待處理的模塊對(duì)象,包括:
S1:建立模塊加載棧;
S2:將所述目標(biāo)模塊對(duì)象作為當(dāng)前待處理的模塊對(duì)象;
S3:將所述當(dāng)前待處理的模塊對(duì)象添加到所述模塊加載棧,將所述模塊加載棧中的模塊對(duì)象作為待處理的模塊對(duì)象;
S4:確定所述當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象的名稱;
S5:根據(jù)所述當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象的名稱,判斷所述當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象是否均在所述模塊加載棧中,如果是,則結(jié)束當(dāng)前流程,否則,執(zhí)行S6;
S6:將所述當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象中不在所述模塊加載棧中的模塊對(duì)象作為所述當(dāng)前待處理的模塊對(duì)象,返回S3。
優(yōu)選地,
所述對(duì)每一個(gè)所述待處理的模塊對(duì)象中的每一個(gè)類進(jìn)行實(shí)例化,包括:
從所述模塊加載棧的棧頂開始,依次對(duì)每一個(gè)所述待處理的模塊對(duì)象中的每一個(gè)類進(jìn)行實(shí)例化。
第四方面,本發(fā)明實(shí)施例提供了一種腳本運(yùn)行裝置,包括:模塊定義接口、類定義接口、生成接口和應(yīng)用程序啟動(dòng)接口;
所述模塊定義接口,用于創(chuàng)建至少一個(gè)模塊對(duì)象,每一個(gè)所述模塊對(duì)象中包括:當(dāng)前模塊對(duì)象的名稱、至少一個(gè)所述當(dāng)前模塊對(duì)象所依賴的模塊對(duì)象的名稱;
所述類定義接口,用于在所述模塊定義接口創(chuàng)建的每一個(gè)所述模塊對(duì)象中,定義至少一個(gè)類;
所述生成接口,用于根據(jù)所述模塊定義接口創(chuàng)建的所述至少一個(gè)模塊對(duì)象和每一個(gè)所述模塊對(duì)象中所述類定義接口定義的所述至少一個(gè)類,生成目標(biāo)腳本;
所述應(yīng)用程序啟動(dòng)接口,包括:
接收單元,用于接收外部發(fā)送的針對(duì)所述生成接口生成的所述目標(biāo)腳本的目標(biāo)模塊對(duì)象的名稱;
確定單元,用于根據(jù)所述接收單元接收的所述目標(biāo)模塊對(duì)象的名稱,在所述至少一個(gè)模塊對(duì)象中確定所述目標(biāo)模塊對(duì)象;
處理單元,用于根據(jù)所述確定單元確定的所述目標(biāo)模塊對(duì)象和至少一個(gè)所述目標(biāo)模塊對(duì)象所依賴的模塊對(duì)象的名稱,確定待處理的模塊對(duì)象;
實(shí)例化單元,用于對(duì)所述處理單元確定的每一個(gè)所述待處理的模塊對(duì)象中的每一個(gè)類進(jìn)行實(shí)例化。
優(yōu)選地,
所述處理單元,包括:
建立子單元,用于建立模塊加載棧;
執(zhí)行子單元,用于將所述目標(biāo)模塊對(duì)象作為當(dāng)前待處理的模塊對(duì)象;
添加子單元,用于將所述執(zhí)行子單元確定的所述當(dāng)前待處理的模塊對(duì)象添加到所述建立子單元建立的所述模塊加載棧,將所述模塊加載棧中的模塊對(duì)象作為待處理的模塊對(duì)象;
確定子單元,用于確定所述添加子單元中所述當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象的名稱;
判斷子單元,用于根據(jù)所述確定子單元確定的所述當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象的名稱,判斷所述當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象是否均在所述模塊加載棧中,如果是,則結(jié)束當(dāng)前流程,否則,觸發(fā)處理子單元;
所述處理子單元,用于將所述當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象中不在所述模塊加載棧中的模塊對(duì)象作為所述當(dāng)前待處理的模塊對(duì)象,觸發(fā)所述添加子單元。
優(yōu)選地,
所述實(shí)例化單元,用于從所述模塊加載棧的棧頂開始,依次對(duì)每一個(gè)所述待處理的模塊對(duì)象中的每一個(gè)類進(jìn)行實(shí)例化。
第五方面,本發(fā)明實(shí)施例提供了一種可讀介質(zhì),包括執(zhí)行指令,當(dāng)存儲(chǔ)控制器的處理器執(zhí)行所述執(zhí)行指令時(shí),所述存儲(chǔ)控制器執(zhí)行上述任一項(xiàng)所述的方法。
第六方面,本發(fā)明實(shí)施例提供了一種存儲(chǔ)控制器,包括:處理器、存儲(chǔ)器和總線;所述存儲(chǔ)器用于存儲(chǔ)執(zhí)行指令,所述處理器與所述存儲(chǔ)器通過(guò)所述總線連接,當(dāng)所述存儲(chǔ)控制器運(yùn)行時(shí),所述處理器執(zhí)行所述存儲(chǔ)器存儲(chǔ)的所述執(zhí)行指令,以使所述存儲(chǔ)控制器執(zhí)行上述任一項(xiàng)所述的方法。
本發(fā)明實(shí)施例提供了一種腳本封裝方法和裝置以及腳本運(yùn)行方法和裝置,其中,在腳本封裝方法中,根據(jù)外部發(fā)送的至少一個(gè)模塊參數(shù),創(chuàng)建至少一個(gè)模塊對(duì)象,并在每一個(gè)模塊對(duì)象中,定義至少一個(gè)類。該方法對(duì)腳本進(jìn)行模塊化封裝,形成目標(biāo)腳本。當(dāng)腳本的代碼量較高時(shí),可以通過(guò)創(chuàng)建模塊對(duì)象對(duì)腳本進(jìn)行封裝,減少各個(gè)類之間存在的耦合,使腳本結(jié)構(gòu)更加清晰。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明一個(gè)實(shí)施例提供的一種腳本封裝方法流程圖;
圖2是本發(fā)明一個(gè)實(shí)施例提供的一種腳本封裝裝置結(jié)構(gòu)示意圖;
圖3是本發(fā)明一個(gè)實(shí)施例提供的一種腳本運(yùn)行方法流程圖;
圖4是本發(fā)明一個(gè)實(shí)施例提供的一種腳本運(yùn)行裝置結(jié)構(gòu)示意圖;
圖5是本發(fā)明一個(gè)實(shí)施例提供的另一種腳本運(yùn)行方法流程圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例,基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
如圖1所示,本發(fā)明實(shí)施例提供了一種腳本封裝方法,該方法可以包括以下步驟:
步驟101:接收外部發(fā)送的至少一個(gè)模塊參數(shù),每一個(gè)模塊參數(shù)中包括:模塊的名稱、至少一個(gè)模塊所依賴的模塊的名稱;
步驟102:針對(duì)每一個(gè)模塊參數(shù),根據(jù)當(dāng)前模塊參數(shù),創(chuàng)建當(dāng)前模塊對(duì)象,當(dāng)前模塊對(duì)象中包括:當(dāng)前模塊對(duì)象的名稱、至少一個(gè)當(dāng)前模塊對(duì)象所依賴的模塊對(duì)象的名稱;
步驟103:在每一個(gè)模塊對(duì)象中,定義至少一個(gè)類;
步驟104:根據(jù)至少一個(gè)模塊對(duì)象和每一個(gè)模塊對(duì)象中至少一個(gè)類,生成目標(biāo)腳本。
在圖1所示的實(shí)施例中,該方法根據(jù)外部發(fā)送的至少一個(gè)模塊參數(shù),創(chuàng)建至少一個(gè)模塊對(duì)象,并在每一個(gè)模塊對(duì)象中,定義至少一個(gè)類。該方法對(duì)腳本進(jìn)行模塊化封裝,形成目標(biāo)腳本。當(dāng)腳本的代碼量較高時(shí),可以通過(guò)創(chuàng)建模塊對(duì)象對(duì)腳本進(jìn)行封裝,減少各個(gè)類之間存在的耦合,使腳本結(jié)構(gòu)更加清晰。
在本發(fā)明的一個(gè)實(shí)施例中,為了使模塊對(duì)象執(zhí)行相應(yīng)的功能,需要在每一個(gè)模塊對(duì)象中,定義不同的類,步驟103包括:在目標(biāo)模塊對(duì)象中,接收外部發(fā)送的針對(duì)目標(biāo)模塊對(duì)象的至少一個(gè)目標(biāo)類參數(shù),每一個(gè)目標(biāo)類參數(shù)中包括:目標(biāo)基類、目標(biāo)類的名稱、目標(biāo)類的繼承關(guān)系、目標(biāo)類的依賴關(guān)系;針對(duì)每一個(gè)目標(biāo)類參數(shù),根據(jù)當(dāng)前目標(biāo)類參數(shù)中的目標(biāo)基類、目標(biāo)類的名稱、目標(biāo)類的繼承關(guān)系和目標(biāo)類的依賴關(guān)系,在目標(biāo)模塊對(duì)象中,定義當(dāng)前目標(biāo)類。
在模塊對(duì)象中,如果缺省基類參數(shù),則新定義的類從基類派生。在本實(shí)施例中,JavaScript使用原型鏈的方式實(shí)現(xiàn)類繼承,當(dāng)子類與原型鏈上的父對(duì)象存在同名方法時(shí),原型鏈上的父對(duì)象的方法將被屏蔽,通過(guò)此方法名訪問(wèn)的是子類上的方法。本發(fā)明實(shí)現(xiàn)了一套在子類方法中訪問(wèn)原型鏈上父對(duì)象同名方法的機(jī)制。
該機(jī)制原理如下:
(1)在接收到類原型對(duì)象后,對(duì)原型對(duì)象上的每一個(gè)方法進(jìn)行包裝,并創(chuàng)建一個(gè)新對(duì)象,在新對(duì)象上創(chuàng)建原型對(duì)象同名的方法,此方法在內(nèi)存中指向包裝后的原型對(duì)象方法。新創(chuàng)建的對(duì)象作為類原型繼承的原型對(duì)象。
(2)對(duì)原型對(duì)象方法的包裝采用閉包原理,通過(guò)閉包在內(nèi)存中保持原型鏈上父對(duì)象方法的引用,從而達(dá)到訪問(wèn)原型鏈父對(duì)象方法的目的。
以下是該機(jī)制的偽代碼:
通過(guò)上面的包裝,可以在自己方法中通過(guò)“this.當(dāng)前父方法”訪問(wèn)原型鏈父對(duì)象上的同名方法。
如圖2所示,本發(fā)明實(shí)施例提供了一種腳本封裝裝置,包括:
模塊定義接口201,用于接收外部發(fā)送的至少一個(gè)模塊參數(shù),每一個(gè)模塊參數(shù)中包括:模塊的名稱、至少一個(gè)模塊所依賴的模塊的名稱;針對(duì)每一個(gè)模塊參數(shù),根據(jù)當(dāng)前模塊參數(shù),創(chuàng)建當(dāng)前模塊對(duì)象,當(dāng)前模塊對(duì)象中包括:當(dāng)前模塊對(duì)象的名稱、至少一個(gè)當(dāng)前模塊對(duì)象所依賴的模塊對(duì)象的名稱;
類定義接口202,用于在模塊定義接口201創(chuàng)建的每一個(gè)模塊對(duì)象中,定義至少一個(gè)類;
生成接口203,用于根據(jù)模塊定義接口201創(chuàng)建的至少一個(gè)模塊對(duì)象和每一個(gè)模塊對(duì)象中類定義接口202定義的至少一個(gè)類,生成目標(biāo)腳本。
在本發(fā)明的一個(gè)實(shí)施例中,類定義接口202,用于在目標(biāo)模塊對(duì)象中,接收外部發(fā)送的針對(duì)目標(biāo)模塊對(duì)象的至少一個(gè)目標(biāo)類參數(shù),每一個(gè)目標(biāo)類參數(shù)中包括:目標(biāo)基類、目標(biāo)類的名稱、目標(biāo)類的繼承關(guān)系、目標(biāo)類的依賴關(guān)系;針對(duì)每一個(gè)目標(biāo)類參數(shù),根據(jù)當(dāng)前目標(biāo)類參數(shù)中的目標(biāo)基類、目標(biāo)類的名稱、目標(biāo)類的繼承關(guān)系和目標(biāo)類的依賴關(guān)系,在目標(biāo)模塊對(duì)象中,定義當(dāng)前目標(biāo)類。
在本實(shí)施例中,表1所示的是模塊定義接口的描述,
表1:
在本實(shí)施例中,表2所示的是類定義接口的描述,
表2:
如圖3所示,本發(fā)明實(shí)施例提供了一種腳本運(yùn)行方法,該方法包括以下步驟:
步驟301:創(chuàng)建至少一個(gè)模塊對(duì)象,每一個(gè)模塊對(duì)象中包括:當(dāng)前模塊對(duì)象的名稱、至少一個(gè)當(dāng)前模塊對(duì)象所依賴的模塊對(duì)象的名稱;
步驟302:在每一個(gè)模塊對(duì)象中,定義至少一個(gè)類;
步驟303:根據(jù)至少一個(gè)模塊對(duì)象和每一個(gè)模塊對(duì)象中至少一個(gè)類,生成目標(biāo)腳本;
步驟304:接收外部發(fā)送的針對(duì)目標(biāo)腳本的目標(biāo)模塊對(duì)象的名稱;
步驟305:根據(jù)目標(biāo)模塊對(duì)象的名稱,在至少一個(gè)模塊對(duì)象中確定目標(biāo)模塊對(duì)象;
步驟306:根據(jù)目標(biāo)模塊對(duì)象和至少一個(gè)目標(biāo)模塊對(duì)象所依賴的模塊對(duì)象的名稱,確定待處理的模塊對(duì)象;
步驟307:對(duì)每一個(gè)待處理的模塊對(duì)象中的每一個(gè)類進(jìn)行實(shí)例化。
在圖3所示的實(shí)施例中,該腳本運(yùn)行方法基于腳本的模塊化封裝,當(dāng)目標(biāo)腳本運(yùn)行時(shí),先根據(jù)目標(biāo)模塊對(duì)象的名稱確定目標(biāo)模塊對(duì)象,再對(duì)目標(biāo)模塊對(duì)象中的每一個(gè)類進(jìn)行加載并實(shí)例化。當(dāng)需要實(shí)例化的類較多時(shí),可以直接對(duì)這些類對(duì)應(yīng)的模塊對(duì)象進(jìn)行操作,不需要對(duì)每一個(gè)類逐一進(jìn)行操作。
在本發(fā)明的一個(gè)實(shí)施例中,為了對(duì)模塊對(duì)象中的每一個(gè)類進(jìn)行加載并實(shí)例化,步驟306包括:
S1:建立模塊加載棧;
S2:將目標(biāo)模塊對(duì)象作為當(dāng)前待處理的模塊對(duì)象;
S3:將當(dāng)前待處理的模塊對(duì)象添加到模塊加載棧,將模塊加載棧中的模塊對(duì)象作為待處理的模塊對(duì)象;
S4:確定當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象的名稱;
S5:根據(jù)當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象的名稱,判斷當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象是否均在模塊加載棧中,如果是,則結(jié)束當(dāng)前流程,否則,執(zhí)行S6;
S6:將當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象中不在模塊加載棧中的模塊對(duì)象作為當(dāng)前待處理的模塊對(duì)象,返回S3。
在本實(shí)施例中,目標(biāo)模塊對(duì)象為腳本入口模塊。模塊對(duì)象按照先進(jìn)后出的原則通過(guò)模塊加載棧。
在本發(fā)明的一個(gè)實(shí)施例中,為了實(shí)現(xiàn)對(duì)模塊對(duì)象中的每一個(gè)類的有序加載,步驟307包括:從模塊加載棧的棧頂開始,依次對(duì)每一個(gè)待處理的模塊對(duì)象中的每一個(gè)類進(jìn)行實(shí)例化。
以下以手機(jī)費(fèi)報(bào)銷單向服務(wù)器端提交數(shù)據(jù)的場(chǎng)景為例,對(duì)腳本運(yùn)行方法進(jìn)行簡(jiǎn)單說(shuō)明,在該場(chǎng)景中先定義了“報(bào)銷”模塊,在“報(bào)銷”模塊下定義了“手機(jī)費(fèi)報(bào)銷單”模型、數(shù)據(jù)提交服務(wù),并演示了如何在“手機(jī)費(fèi)報(bào)銷單”模型中使用數(shù)據(jù)提交服務(wù)提交數(shù)據(jù)。
1、文件名:app.js
文件偽代碼:
2、文件名:model.js
文件偽代碼:
3、文件名:service.js
文件偽代碼:
如圖4所示,本發(fā)明實(shí)施例提供了一種腳本運(yùn)行裝置,包括:模塊定義接口401、類定義接口402、生成接口403和應(yīng)用程序啟動(dòng)接口404;
模塊定義接口401,用于創(chuàng)建至少一個(gè)模塊對(duì)象,每一個(gè)模塊對(duì)象中包括:當(dāng)前模塊對(duì)象的名稱、至少一個(gè)當(dāng)前模塊對(duì)象所依賴的模塊對(duì)象的名稱;根據(jù)至少一個(gè)模塊對(duì)象和每一個(gè)模塊對(duì)象中至少一個(gè)類,生成目標(biāo)腳本;
類定義接口402,用于在模塊定義接口401創(chuàng)建的每一個(gè)模塊對(duì)象中,定義至少一個(gè)類;
生成接口403,用于根據(jù)模塊定義接口401創(chuàng)建的至少一個(gè)模塊對(duì)象和每一個(gè)模塊對(duì)象中類定義接口402定義的至少一個(gè)類,生成目標(biāo)腳本;
應(yīng)用程序啟動(dòng)接口404,包括:
接收單元4041,用于接收外部發(fā)送的針對(duì)生成接口40 3生成的目標(biāo)腳本的目標(biāo)模塊對(duì)象的名稱;
確定單元4042,用于根據(jù)目標(biāo)模塊對(duì)象的名稱,在至少一個(gè)模塊對(duì)象中確定目標(biāo)模塊對(duì)象;
處理單元4043,用于根據(jù)確定單元4042確定的目標(biāo)模塊對(duì)象和至少一個(gè)目標(biāo)模塊對(duì)象所依賴的模塊對(duì)象的名稱,確定待處理的模塊對(duì)象;
實(shí)例化單元4044,用于對(duì)處理單元4043確定的每一個(gè)待處理的模塊對(duì)象中的每一個(gè)類進(jìn)行實(shí)例化。
類定義接口用來(lái)加載應(yīng)用程序需要使用的類,傳遞給應(yīng)用程序接口的模塊稱為應(yīng)用程序入口模塊。本實(shí)施例以應(yīng)用程序入口模塊為根,以樹型接口存儲(chǔ)模塊間依賴關(guān)系。依賴模塊名稱集合屬性用來(lái)存儲(chǔ)葉子節(jié)點(diǎn)。應(yīng)用程序啟動(dòng)接口在實(shí)例化入口模塊對(duì)象所包含的類時(shí),將追溯模塊對(duì)象的依賴關(guān)系,逐個(gè)加載依賴模塊對(duì)象,并實(shí)例化模塊對(duì)象內(nèi)的類。
在本發(fā)明的一個(gè)實(shí)施例中,處理單元4043,包括:
建立子單元,用于建立模塊加載棧;
執(zhí)行子單元,用于將目標(biāo)模塊對(duì)象作為當(dāng)前待處理的模塊對(duì)象;
添加子單元,用于將執(zhí)行子單元確定的當(dāng)前待處理的模塊對(duì)象添加到建立子單元建立的模塊加載棧,將模塊加載棧中的模塊對(duì)象作為待處理的模塊對(duì)象;
確定子單元,用于確定添加子單元中當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象的名稱;
判斷子單元,用于根據(jù)確定子單元確定的當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象的名稱,判斷當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象是否均在模塊加載棧中,如果是,則結(jié)束當(dāng)前流程,否則,觸發(fā)處理子單元;
處理子單元,用于將當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象中不在模塊加載棧中的模塊對(duì)象作為當(dāng)前待處理的模塊對(duì)象,觸發(fā)添加子單元。
在本發(fā)明的一個(gè)實(shí)施例中,實(shí)例化單元4044,用于從模塊加載棧的棧頂開始,依次對(duì)每一個(gè)待處理的模塊對(duì)象中的每一個(gè)類進(jìn)行實(shí)例化。
如圖5所示,本發(fā)明實(shí)施例以模塊化封裝目標(biāo)腳本M為例,對(duì)目標(biāo)腳本運(yùn)行方法進(jìn)行詳細(xì)地說(shuō)明,該方法包括以下步驟:
步驟501:腳本封裝裝置接收外部發(fā)送的至少一個(gè)模塊參數(shù),每一個(gè)模塊參數(shù)中包括:模塊的名稱、至少一個(gè)模塊所依賴的模塊的名稱。
在本實(shí)施例中,腳本封裝裝置接收外部發(fā)送的四個(gè)模塊參數(shù),每一個(gè)模塊參數(shù)中包括:模塊的名稱、至少一個(gè)模塊所依賴的模塊的名稱。例如,四個(gè)模塊參數(shù)分別為(A,B、C)、(B,A、D)、(C,A)、(D,B)。
步驟502:腳本封裝裝置針對(duì)每一個(gè)模塊參數(shù),根據(jù)當(dāng)前模塊參數(shù),創(chuàng)建當(dāng)前模塊對(duì)象,當(dāng)前模塊對(duì)象中包括:當(dāng)前模塊對(duì)象的名稱、至少一個(gè)當(dāng)前模塊對(duì)象所依賴的模塊對(duì)象的名稱。
腳本封裝裝置根據(jù)四個(gè)模塊參數(shù),創(chuàng)建四個(gè)模塊對(duì)象,A、B、C、D,每一個(gè)模塊對(duì)象中包括:當(dāng)前模塊對(duì)象的名稱、至少一個(gè)當(dāng)前模塊對(duì)象所依賴的模塊對(duì)象的名稱。例如,模塊對(duì)象A中包括:模塊對(duì)象的名稱A、兩個(gè)模塊對(duì)象A所依賴的模塊對(duì)象的名稱B、C。
步驟503:在目標(biāo)模塊對(duì)象中,腳本封裝裝置接收外部發(fā)送的針對(duì)目標(biāo)模塊對(duì)象的至少一個(gè)目標(biāo)類參數(shù),每一個(gè)目標(biāo)類參數(shù)中包括:目標(biāo)基類、目標(biāo)類的名稱、目標(biāo)類的繼承關(guān)系和目標(biāo)類的依賴關(guān)系。
接收外部發(fā)送的針對(duì)模塊對(duì)象A、B、C、D的類參數(shù),以模塊對(duì)象A為例,接收外部發(fā)送的針對(duì)模塊對(duì)象A的兩個(gè)類參數(shù),其中,一個(gè)類參數(shù)中包括:基類A1、類的名稱B1、類B1繼承于基類A1、類B1依賴于基類A1;另一個(gè)類參數(shù)中包括:基類A1、類的名稱B2、類B2繼承于基類A1、類B2依賴于基類A1。
步驟504:腳本封裝裝置針對(duì)每一個(gè)目標(biāo)類參數(shù),根據(jù)當(dāng)前目標(biāo)類參數(shù)中的目標(biāo)基類、目標(biāo)類的名稱、目標(biāo)類的繼承關(guān)系和目標(biāo)類的依賴關(guān)系,在目標(biāo)模塊對(duì)象中,定義當(dāng)前目標(biāo)類。
腳本封裝裝置根據(jù)步驟503中的類參數(shù),為每一個(gè)模塊對(duì)象定義至少一個(gè)類,以模塊對(duì)象A為例,在模塊對(duì)象A中定義兩個(gè)類,類B1和類B2。按照此方法分別在模塊對(duì)象B、C、D中定義類,這里不再贅述。
步驟505:腳本封裝裝置根據(jù)至少一個(gè)模塊對(duì)象和每一個(gè)模塊對(duì)象中至少一個(gè)類,生成目標(biāo)腳本M。
腳本封裝裝置根據(jù)模塊對(duì)象A、B、C、D和每一個(gè)模塊對(duì)象中至少一個(gè)類,生成目標(biāo)腳本M。
步驟506:腳本運(yùn)行裝置接收外部發(fā)送的針對(duì)目標(biāo)腳本M的目標(biāo)模塊對(duì)象的名稱,根據(jù)目標(biāo)模塊對(duì)象的名稱,在至少一個(gè)模塊對(duì)象中確定目標(biāo)模塊對(duì)象。
腳本運(yùn)行裝置接收外部發(fā)送的針對(duì)目標(biāo)腳本M的目標(biāo)模塊對(duì)象的名稱A,在模塊對(duì)象A、B、C、D中確定目標(biāo)模塊對(duì)象A。
步驟507:腳本運(yùn)行裝置建立模塊加載棧。
該加載棧用于加載模塊對(duì)象。
步驟508:腳本運(yùn)行裝置將目標(biāo)模塊對(duì)象作為當(dāng)前待處理的模塊對(duì)象。
將目標(biāo)模塊對(duì)象A作為當(dāng)前待處理的模塊對(duì)象。
步驟509:腳本運(yùn)行裝置將當(dāng)前待處理的模塊對(duì)象添加到模塊加載棧,將模塊加載棧中的模塊對(duì)象作為待處理的模塊對(duì)象。
將當(dāng)前待處理的模塊對(duì)象A添加到模塊加載棧,并將A作為待處理的模塊對(duì)象。
步驟510:腳本運(yùn)行裝置確定當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象的名稱。
確定當(dāng)前待處理的模塊對(duì)象A所依賴的模塊對(duì)象的名稱為B、C。
步驟511:腳本運(yùn)行裝置根據(jù)當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象的名稱,判斷當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象是否均在模塊加載棧中,如果是,執(zhí)行步驟512,否則,執(zhí)行步驟513。
當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象B、C不在模塊加載棧中,執(zhí)行步驟513。需要說(shuō)明的是,當(dāng)步驟513需要依次將模塊對(duì)象B、C作為當(dāng)前待處理的模塊對(duì)象進(jìn)行處理時(shí),相應(yīng)的,應(yīng)該分別進(jìn)行本步驟的判斷過(guò)程,在這里,執(zhí)行步驟512只針對(duì)當(dāng)前模塊對(duì)象。例如,模塊對(duì)象B作為當(dāng)前待處理的模塊對(duì)象執(zhí)行本步驟,若判斷結(jié)果為是,只終止模塊對(duì)象B相應(yīng)的流程,而不影響模塊對(duì)象C作為當(dāng)前待處理的模塊對(duì)象執(zhí)行本步驟。
步驟512:腳本運(yùn)行裝置結(jié)束當(dāng)前流程。
步驟513:腳本運(yùn)行裝置將當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象中不在模塊加載棧中的模塊對(duì)象作為當(dāng)前待處理的模塊對(duì)象。
將模塊對(duì)象B、C作為當(dāng)前待處理的模塊對(duì)象,返回步驟509。模塊對(duì)象B、C的處理過(guò)程與模塊對(duì)象A類似,這里不再贅述。最終,將模塊對(duì)象A、B、C、D依次添加到模塊加載棧。
步驟514:腳本運(yùn)行裝置從模塊加載棧的棧頂開始,依次對(duì)每一個(gè)待處理的模塊對(duì)象中的每一個(gè)類進(jìn)行實(shí)例化。
從模塊加載棧的棧頂開始,依次對(duì)模塊對(duì)象A、B、C、D中的每一個(gè)類進(jìn)行實(shí)例化。例如,對(duì)模塊對(duì)象A中的類B1和類B2分別進(jìn)行實(shí)例化。該模塊加載棧遵循先進(jìn)后出的原則。
綜上,本發(fā)明各個(gè)實(shí)施例至少具有如下效果:
1、在本發(fā)明實(shí)施例中,在腳本封裝過(guò)程中,根據(jù)外部發(fā)送的至少一個(gè)模塊參數(shù),創(chuàng)建至少一個(gè)模塊對(duì)象,并在每一個(gè)模塊對(duì)象中,定義至少一個(gè)類。該方法對(duì)腳本進(jìn)行模塊化封裝,形成目標(biāo)腳本。當(dāng)腳本的代碼量較高時(shí),可以通過(guò)創(chuàng)建模塊對(duì)象對(duì)腳本進(jìn)行封裝,減少各個(gè)類之間存在的耦合,使腳本結(jié)構(gòu)更加清晰。
2、在本發(fā)明實(shí)施例中,腳本運(yùn)行基于腳本的模塊化封裝,當(dāng)目標(biāo)腳本運(yùn)行時(shí),先根據(jù)目標(biāo)模塊對(duì)象的名稱確定目標(biāo)模塊對(duì)象,再對(duì)目標(biāo)模塊對(duì)象中的每一個(gè)類進(jìn)行加載并實(shí)例化。當(dāng)需要實(shí)例化的類較多時(shí),可以直接對(duì)這些類對(duì)應(yīng)的模塊對(duì)象進(jìn)行操作,不需要對(duì)每一個(gè)類逐一進(jìn)行操作。
3、在本發(fā)明實(shí)施例中,提供了一種模塊對(duì)象中類的加載和實(shí)例化方法,通過(guò)建立模塊加載棧,并根據(jù)當(dāng)前待處理的模塊對(duì)象所依賴的模塊對(duì)象的名稱,確定模塊加載棧中的待處理的模塊對(duì)象,按照先進(jìn)后出的順序使待處理的模塊對(duì)象出棧,并對(duì)出棧的待處理的模塊對(duì)象依次進(jìn)行實(shí)例化。
上述裝置內(nèi)的各單元之間的信息交互、執(zhí)行過(guò)程等內(nèi)容,由于與本發(fā)明方法實(shí)施例基于同一構(gòu)思,具體內(nèi)容可參見本發(fā)明方法實(shí)施例中的敘述,此處不再贅述。
需要說(shuō)明的是,在本文中,諸如第一和第二之類的關(guān)系術(shù)語(yǔ)僅僅用來(lái)將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來(lái),而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)〃·····”限定的要素,并不排除在包括所述要素的過(guò)程、方法、物品或者設(shè)備中還存在另外的相同因素。
本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述方法實(shí)施例的全部或部分步驟可以通過(guò)程序指令相關(guān)的硬件來(lái)完成,前述的程序可以存儲(chǔ)在計(jì)算機(jī)可讀取的存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),執(zhí)行包括上述方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:ROM、RAM、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)中。
最后需要說(shuō)明的是:以上所述僅為本發(fā)明的較佳實(shí)施例,僅用于說(shuō)明本發(fā)明的技術(shù)方案,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi)所做的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍內(nèi)。