最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript? Constructor構(gòu)造器模式與Module模塊模式

 更新時(shí)間:2022年08月25日 15:09:16   作者:前端修羅場(chǎng)???????  
這篇文章主要介紹了Javascript? Constructor構(gòu)造器模式與Module模塊模式,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

前言

首先我們要知道:什么是模式?

模式,就是專門為某些常見(jiàn)問(wèn)題開(kāi)發(fā)的、優(yōu)秀的解決方案。它通常經(jīng)過(guò)一系列實(shí)踐證明、針對(duì)某類問(wèn)題具有可重用性的解決方案。 而設(shè)計(jì)模式,不同于編程模式,其與具體的語(yǔ)言無(wú)關(guān)。

1.Constructor構(gòu)造器模式

1.1基礎(chǔ)Constructor構(gòu)造器模式

// 使用函數(shù)來(lái)模擬一個(gè)Car類
function Car(model,year,miles) {
	this.model = model ;
	this.year = year;
	this.miles = miles;

	this.toString = function () {
		return this.model + "已經(jīng)行駛了" + this.miles + "米";
	}
}

//調(diào)用
var honda = new Car("東風(fēng)Honda",2009,20000);//實(shí)例化Car

//輸出結(jié)果
console.log(honda.toString());

缺陷:

  • 繼承困難;
  • toString()是為每個(gè)使用Car構(gòu)造器創(chuàng)建的新對(duì)象而分別重新定義的。這樣不理想,因?yàn)檫@種函數(shù)應(yīng)該在所有的Car類實(shí)力之間共享。

1.2進(jìn)階 帶原型的Constructor構(gòu)造器模型

function Car(model,year,miles) {
	this.model = model ;
	this.year = year;
	this.miles = miles;

	//每個(gè)對(duì)象都有構(gòu)造器原型的所有屬性。
	Car.prototype.toString = function() {
		return this.model + "已經(jīng)行駛了" + this.miles + "米";
	}
}
//調(diào)用
var honda = new Car("東風(fēng)Honda",2009,20000);//實(shí)例化Car
console.log(honda.toString());

優(yōu)點(diǎn):

  • toString()的單一實(shí)例能夠在所有的Car對(duì)象之間共享。

2. Module 模塊模式

模塊能幫助我們清晰分離和組織項(xiàng)目中的代碼單元。

在js中有幾種實(shí)現(xiàn)模塊的方法:

  • 對(duì)象字面量表示法;
  • Module模式
  • AMD模塊
  • CommonJs模塊
  • ES Harmony模塊

本篇中我們主要介紹“對(duì)象字面量”表示法。

2.1對(duì)象字面量

示例:

<script type="text/javascript">
    const myObjectLiteral = {
        varibaleKey : varibaleValue,
        function: function () {
                //實(shí)現(xiàn)
        }
    };
</script>

注意 :

  • 對(duì)象字面量不需要使用 new 實(shí)例化;
  • 不能用在一個(gè)語(yǔ)句的開(kāi)頭,否則可能會(huì)被解釋為一個(gè)塊的開(kāi)始;

2.2 Module(模塊)模式

JS中,Module模式用于進(jìn)一步模擬類的概念。它能夠使一個(gè)單獨(dú)的對(duì)象擁有公有、私有方法和變量,從而屏蔽來(lái)自 全局作用域的特殊部分。進(jìn)而降低了與其他腳本沖突的可能性。

其中,私有部分,主要利用了“閉包”。由于閉包的存在,聲明的變量和方法只能在該模式內(nèi)部可用。但在返回對(duì)象上 定義的變量和方法,外部使用者是能夠調(diào)用的。

一個(gè)關(guān)于購(gòu)物車的例子:

<script type="text/javascript">
	const basketModule = (function() {
		//私有
		let baskey = [];
		function doSomethingPrivate () {
			//實(shí)現(xiàn)
		}
		function doSomethingElsePrivate() {
			//實(shí)現(xiàn)
		}
		//返回一個(gè)暴露出的公有對(duì)象API
		return {
			//添加item到購(gòu)物車
			addItem: function (values) {
				basket.push(values);
			},
			//獲取購(gòu)物車?yán)锏膇tem數(shù)
			getItemCount: function() {
				return basket.length;
			},
			//私有函數(shù)的公有形式別名
			doSomething: doSomethingPrivate,
			//獲取購(gòu)物車?yán)锼衖tem的價(jià)格總值
			getTotal: function() {
				let itemCount = this.getItemCount(),
					total = 0;
				while (itemCount--) {
					total += basket[itemCount].price;

				}
				return total;
			}
		}

	})();
	//交互
	basketModule.addItem({
		item: "bread",
		price: 0.5
	});
	basketModule.addItem({
		item: "醬油",
		price: 1.5
	});
	//輸出結(jié)果
	console.log(basketModule.getItemCount());//2
	console.log(basketModule.getTotal());//0.5+1.5 = 2
	//注意
	console.log(basketModule.basket);//underfined。因?yàn)閎asket沒(méi)有暴露在公有的API中
</script>

優(yōu)點(diǎn):

  • 整潔;
  • 支持私有數(shù)據(jù)。在 Module 模式中,代碼的公有部分能夠接觸到私有部分,而外部代碼無(wú)法接觸到類的私有部分。

缺點(diǎn):

  • 可見(jiàn)性需要改變時(shí),需要修改每一處使用過(guò)該成員的地方;
  • 無(wú)法訪問(wèn)之后在方法中添加的私有成員;
  • 無(wú)法為私有成員創(chuàng)建自動(dòng)化測(cè)試單元;

到此這篇關(guān)于Javascript  Constructor構(gòu)造器模式與Module模塊模式的文章就介紹到這了,更多相關(guān)Javascript  Constructor 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js中class的點(diǎn)擊事件沒(méi)有效果的解決方法

    js中class的點(diǎn)擊事件沒(méi)有效果的解決方法

    下面小編就為大家?guī)?lái)一篇js中class的點(diǎn)擊事件沒(méi)有效果的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10
  • JavaScript中0、空字符串、''0''是true還是false的知識(shí)點(diǎn)分享

    JavaScript中0、空字符串、''0''是true還是false的知識(shí)點(diǎn)分享

    在本篇文章里小編給大家整理的是JavaScript中0、空字符串、'0'是true還是false的知識(shí)點(diǎn)分享,有需要的朋友們參考下。
    2019-09-09
  • Javascript的比較匯總

    Javascript的比較匯總

    本文匯總了Javascript中兩個(gè)對(duì)象的比較、不同類型的比較以及對(duì)象跟原始值的比較,并進(jìn)行了實(shí)例演示,希望能幫助到有需要的朋友們。
    2016-07-07
  • 20170918 前端開(kāi)發(fā)周報(bào)之JS前端開(kāi)發(fā)必看

    20170918 前端開(kāi)發(fā)周報(bào)之JS前端開(kāi)發(fā)必看

    本文給大家分享了最新版js 前端開(kāi)發(fā)周報(bào),內(nèi)容非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-09-09
  • 微信小程序?qū)崿F(xiàn)導(dǎo)航功能的操作步驟

    微信小程序?qū)崿F(xiàn)導(dǎo)航功能的操作步驟

    這篇文章主要給大家介紹了關(guān)于微信小程序?qū)崿F(xiàn)導(dǎo)航功能的操作步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 如何理解JavaScript模塊化

    如何理解JavaScript模塊化

    模塊化簡(jiǎn)單來(lái)說(shuō)就是將一個(gè)完整的長(zhǎng)篇代碼文件根據(jù)功能進(jìn)行劃分成幾個(gè)文件,這些文件各自負(fù)責(zé)一個(gè)獨(dú)立的功能,各個(gè)文件組合起來(lái)實(shí)現(xiàn)一個(gè)完整的大功能,這就是模塊化,每個(gè)負(fù)責(zé)獨(dú)立功能的文件就是模塊。
    2021-05-05
  • Javascript排序算法之計(jì)數(shù)排序的實(shí)例

    Javascript排序算法之計(jì)數(shù)排序的實(shí)例

    計(jì)數(shù)排序是一種高效的線性排序,它通過(guò)計(jì)算一個(gè)集合中元素楚翔的次數(shù)來(lái)確定集合如何排列,計(jì)數(shù)排序不需要進(jìn)行數(shù)據(jù)的比較,所有他的運(yùn)行效率前面介紹的都高
    2014-04-04
  • js不間斷滾動(dòng)的簡(jiǎn)單實(shí)現(xiàn)

    js不間斷滾動(dòng)的簡(jiǎn)單實(shí)現(xiàn)

    下面小編就為大家?guī)?lái)一篇js不間斷滾動(dòng)的簡(jiǎn)單實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • js單線程的本質(zhì) Event Loop解析

    js單線程的本質(zhì) Event Loop解析

    這篇文章主要介紹了js單線程的本質(zhì) Event Loop解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • uniapp多選框全選功能的實(shí)現(xiàn)思路與方法實(shí)例

    uniapp多選框全選功能的實(shí)現(xiàn)思路與方法實(shí)例

    uniapp給我們提供了tabs組件進(jìn)行單項(xiàng)的切換,但是多選的效果需要我們自己去手寫,下面這篇文章主要給大家介紹了關(guān)于uniapp多選框全選功能實(shí)現(xiàn)思路與方法的相關(guān)資料,需要的朋友可以參考下
    2022-08-08

最新評(píng)論

兰坪| 梁平县| 万荣县| 崇明县| 昭平县| 苗栗市| 化隆| 鞍山市| 全椒县| 沂水县| 乐至县| 阜新| 宜宾市| 定安县| 中方县| 雅安市| 乌拉特后旗| 中山市| 香港| 名山县| 南安市| 山丹县| 岚皋县| 仪陇县| 阳泉市| 清水县| 古丈县| 临城县| 长丰县| 九龙坡区| 永年县| 榆中县| 陈巴尔虎旗| 卢龙县| 池州市| 沅江市| 方正县| 六盘水市| 定远县| 汤阴县| 玛多县|