詳解JavaScript如何設(shè)置私有屬性
ES6之前的私有屬性模擬
1、構(gòu)造函數(shù)形式創(chuàng)建對(duì)象
function Person(name) { let _name = name; // 私有屬性 this.getName = function() { return _name; }; this.setName = function(newName) { _name = newName; }; } let person = new Person('Alice'); console.log(person.getName()); // Alice person.setName('Bob'); console.log(person.getName()); // Bob // console.log(person._name); // 這會(huì)報(bào)錯(cuò),因?yàn)開(kāi)name是私有的
在這個(gè)例子中,_name是一個(gè)私有屬性,因?yàn)樗窃诤瘮?shù)作用域內(nèi)定義的,外部無(wú)法直接訪問(wèn)。
2、字面量形式創(chuàng)建對(duì)象
let obj = (function() { let privateVar = 'I am private'; return { publicMethod: function() { console.log(privateVar); } }; })(); obj.publicMethod(); // 正確訪問(wèn)私有變量 // console.log(obj.privateVar ); // 這會(huì)報(bào)錯(cuò),因?yàn)閜rivatVvar是私有的
在這個(gè)例子中,privatVvar是一個(gè)真正的私有變量,因?yàn)樗窃谝粋€(gè)立即執(zhí)行函數(shù)表達(dá)式(IFEe)的作用域內(nèi)定義的,外部代碼無(wú)法直接訪問(wèn)。我們通過(guò)返回的對(duì)象中的publiMmethod方法來(lái)暴露對(duì)privatVvar的訪問(wèn)。
ES6中創(chuàng)建私有屬性
class Person { #name; // 私有屬性 constructor(name) { this.#name = name; } getName() { return this.#name; } setName(newName) { this.#name = newName; } } let person = new Person('Alice'); console.log(person.getName()); // Alice person.setName('Bob'); console.log(person.getName()); // Bob // console.log(person.#name); // 這會(huì)報(bào)錯(cuò),因?yàn)?name是私有的
私有屬性的好處
私有屬性有以下好處:
1.封裝性:私有屬性可以隱藏類的內(nèi)部實(shí)現(xiàn)細(xì)節(jié),只暴露必要的接口給外部使用。
2.安全性:防止外部代碼隨意修改類的內(nèi)部狀態(tài),可能導(dǎo)致錯(cuò)誤或不一致的狀態(tài)。
3.維護(hù)性:當(dāng)類的內(nèi)部實(shí)現(xiàn)發(fā)生變化時(shí),只要保持接口不變,就不會(huì)影響到使用該類的其他代碼。
到此這篇關(guān)于詳解JavaScript如何設(shè)置私有屬性的文章就介紹到這了,更多相關(guān)JavaScript設(shè)置私有屬性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS判斷指定dom元素是否在屏幕內(nèi)的方法實(shí)例
做圖片滾動(dòng)加載的時(shí)候會(huì)判斷圖片是否在可視區(qū)域內(nèi),如果在就加載原地址圖片,下面這篇文章就給大家介紹了利用JS判斷指定dom元素是否在屏幕內(nèi)的方法實(shí)例,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-01-01JavaScript實(shí)現(xiàn)大文件分片上傳處理
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)大文件分片上傳處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08js實(shí)現(xiàn)下拉框二級(jí)聯(lián)動(dòng)
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)下拉框二級(jí)聯(lián)動(dòng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12談?wù)劄槭裁茨愕?JavaScript 代碼如此冗長(zhǎng)
這篇文章主要介紹了談?wù)劄槭裁茨愕?JavaScript 代碼如此冗長(zhǎng),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01微信小程序?qū)崿F(xiàn)循環(huán)動(dòng)畫(huà)效果
這篇文章主要介紹了微信小程序循環(huán)動(dòng)畫(huà)效果的實(shí)現(xiàn)方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07基于JavaScript實(shí)現(xiàn)網(wǎng)頁(yè)版羊了個(gè)羊游戲
最近羊了個(gè)羊火的不得了,這篇文章主要為大家介紹了如何利用JS實(shí)現(xiàn)個(gè)網(wǎng)頁(yè)版羊了個(gè)羊游戲,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-09-09bootstrap中模態(tài)框、模態(tài)框的屬性實(shí)例詳解
這篇文章主要介紹了bootstrap中模態(tài)框、模態(tài)框的屬性實(shí)例詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02基于JavaScript實(shí)現(xiàn)智能右鍵菜單
這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)智能右鍵菜單的相關(guān)資料,需要的朋友可以參考下2016-03-03