JavaScript中利用構(gòu)造器函數(shù)模擬類的方法
前言
本文小編帶大家一起學(xué)習(xí)的是在 JavaScript 中使用構(gòu)造器函數(shù)(construcor function)模擬類。下面話不多說,感興趣的朋友們下面來一起看看吧。
構(gòu)造器函數(shù)簡(jiǎn)介
你可以使用 ES6 的 class 關(guān)鍵字來實(shí)現(xiàn)類,不過我建議你使用傳統(tǒng)的構(gòu)造器函數(shù)來模擬類,因?yàn)檫@樣可以給人一種你是個(gè) JavaScript 老手的錯(cuò)覺,哈哈!
什么是構(gòu)造器函數(shù)?構(gòu)造器函數(shù)是編寫對(duì)象的方法之一。一般情況下,你可以這樣編寫一個(gè)對(duì)象:
var obj = { a:1, b:2 };
但也可以使用構(gòu)造器函數(shù)來編寫對(duì)象:
function Obj(a, b){ this.a = a; this.b = b; } var obj = new Obj(1, 2); //obj 等價(jià)于 { a:1, b:2 }
使用構(gòu)造器函數(shù)的好處在于可以傳遞參數(shù)。構(gòu)造器函數(shù)通常首字母大寫,而且需要使用 new 關(guān)鍵詞來調(diào)用。在 JavaScript 中是沒有類的,利用構(gòu)造器函數(shù)我們可以模擬一個(gè)類。
使用構(gòu)造器函數(shù)編寫棧類
了解了構(gòu)造器函數(shù),我們使用它編寫一個(gè)迷你的棧類,下面就是實(shí)現(xiàn)代碼:
Stack.js
function Stack() { // 私有變量 items,用于記錄數(shù)組,對(duì)象不能直接操作 var items = []; // 類方法 push,在數(shù)組末尾添加項(xiàng),對(duì)象可以直接調(diào)用 this.push = function (element) { items.push(element); }; // 刪除并返回?cái)?shù)組末尾的項(xiàng) this.pop = function () { return items.pop(); }; }
上述棧類中,有個(gè)私有變量 items ,為何它就不能直接操作呢?為何掛在 this 上的方法可以直接調(diào)用?因?yàn)?new 操作符會(huì)將構(gòu)造器函數(shù)中的 this 指向生成的對(duì)象,也就是說掛在 this 上的方法或?qū)傩詫頃?huì)成為生成對(duì)象的方法或?qū)傩?,所以可以直接調(diào)用。而 items 則是函數(shù)內(nèi)部的一個(gè)局部變量,它在函數(shù)外部是不可見的,生成對(duì)象只能通過調(diào)用自身的方法,沿著作用域鏈來操作 items。
var stack = new Stack(); // stack 對(duì)象不能直接操作items,結(jié)果是 undefined console.log(stack.items) // stack 對(duì)象可以直接操作構(gòu)造器函數(shù)中掛在 this 上的屬性和方法 stack.push(1); // 打印了1 console.log(stack.pop())
如果你不熟悉 JavaScript ,那么你應(yīng)該先學(xué)習(xí)一下 JavaScript 作用域、this 和 new 操作符的相關(guān)知識(shí)。推薦閱讀參考 Stoyan Stefanow 的《JavaScript 面向?qū)ο缶幊讨改稀罚@本書里面有很多小的代碼片段以及相關(guān)的圖文解讀,可以幫助你更好地理解 JavaScript 的相關(guān)特性。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)或者使用Javascript能帶來一定的幫助,如果有疑問大家可以留言交流。
- javascript asp教程第三課 new String() 構(gòu)造器
- JavaScript中使用構(gòu)造器創(chuàng)建對(duì)象無需new的情況說明
- 詳解JavaScript中的構(gòu)造器Constructor模式
- JavaScript設(shè)計(jì)模式之工廠模式和構(gòu)造器模式
- javascript設(shè)計(jì)模式Constructor(構(gòu)造器)模式
- JavaScript 高級(jí)篇之閉包、模擬類,繼承(五)
- js模擬類繼承小例子
- JavaScript 模擬類機(jī)制及私有變量的方法及思路
- 在JavaScript中模擬類(class)及類的繼承關(guān)系
相關(guān)文章
使用純javascript實(shí)現(xiàn)經(jīng)典掃雷游戲
本文給大家分享的是個(gè)人剛開始學(xué)習(xí)javascript的時(shí)候?qū)懙姆聎indows經(jīng)典的掃雷游戲的代碼,當(dāng)時(shí)只是寫了下來,沒加注釋,這里補(bǔ)上,有需要的小伙伴可以參考下。2015-04-04微信小程序 如何引入外部字體庫iconfont的圖標(biāo)
這篇文章主要為大家詳細(xì)介紹了微信小程序引入外部字體庫iconfont圖標(biāo)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01純js實(shí)現(xiàn)的積木(div層)拖動(dòng)功能示例
這篇文章主要介紹了純js實(shí)現(xiàn)的積木(div層)拖動(dòng)功能,結(jié)合實(shí)例形式分析了javascript隨機(jī)生成各種顏色div層及響應(yīng)鼠標(biāo)事件改變?cè)貙傩詫?shí)現(xiàn)拖動(dòng)效果的相關(guān)操作技巧,需要的朋友可以參考下2017-07-07Bootstrap基本布局實(shí)現(xiàn)方法詳解
這篇文章主要為大家詳細(xì)介紹了Bootstrap基本布局實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11JS解析json數(shù)據(jù)并將json字符串轉(zhuǎn)化為數(shù)組的實(shí)現(xiàn)方法
json數(shù)據(jù)在ajax實(shí)現(xiàn)異步交互時(shí)起到了很重要的作用,他可以返回請(qǐng)求的數(shù)據(jù),然后利用客戶端的js進(jìn)行解析,這一點(diǎn)體現(xiàn)出js的強(qiáng)大,本文介紹JS解析json數(shù)據(jù)并將json字符串轉(zhuǎn)化為數(shù)組的實(shí)現(xiàn)方法,需要了解的朋友可以參考下2012-12-12基于百度地圖實(shí)現(xiàn)產(chǎn)品銷售的單位位置查看功能設(shè)計(jì)與實(shí)現(xiàn)
這篇文章主要介紹了基于百度地圖實(shí)現(xiàn)產(chǎn)品銷售的單位位置查看功能設(shè)計(jì)與實(shí)現(xiàn)的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10JavaScript數(shù)組去重由慢到快由繁到簡(jiǎn)(優(yōu)化篇)
本文給大家介紹通過indexof去重,hash去重,排序后去重及set去重由慢到快有繁到簡(jiǎn)的方法給大家介紹了js數(shù)組去重的方法,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-08-08js判斷數(shù)組key是否存在(不用循環(huán))的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)硪黄猨s判斷數(shù)組key是否存在(不用循環(huán))的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08