052|JavaScript getter&setter

我們知道,一個對象可以擁有屬性。在過去,我們只要有了對象的引用,就可以隨意的操作屬性。如:

var o = {name:"David"}
console.log(o.name)

o.name = "James" // 修改name
console.log(o.name)

為了讓對象屬性擁有封裝性,不讓外部隨意改動屬性,我們可以通過提供函數(shù)來操作屬性。通過提供兩個函數(shù),一個提供讀取操作:getter,一個提供寫操作:setter。
getter&setter的語法與函數(shù)語法非常相似,把function關鍵字替換為 get或set就是getter&setter的語法了,如下:

get name(){
  statements...
}

set name(value){ //注意setter的括號里有一個value參數(shù)
  statements...
}

我們將上述例子用getter&setter來改寫一下:

function Student()
{
    var _name = "David";
    return {
        get name(){
           console.log("call getter");
            return _name
        }, // 定義getter
        set name(value){
            console.log("call setter");
            _name = value
        } // 定義setter
    }
}
var o = Student()
console.log(o.name) //o.name會調(diào)用getter

o.name = "James" // o.name= 會調(diào)用setter
console.log(o.name) 

上述代碼中定義了 get name() & set name(),當使用o.name時會調(diào)用get name()函數(shù),當使用o.name=value賦值時,會調(diào)用set name()函數(shù)。
讓我們來看一下運行結果:

call getter
David
call setter
call getter
James

有了getter&setter后,代碼就變得非常靈活。例如,將setter去除,就相當于定義了一個只讀變量。將上述代碼的setter去掉后,代碼如下:

function Student()
{
    var _name = "David";
    return {
        get name(){
            console.log("call getter");
            return _name
        },
    }
}
var o = Student()
console.log(o.name)

o.name = "James" // 因為沒有setter,此行代碼相當于沒有
console.log(o.name)

上述代碼去掉了setter,我們來看一下運行結果:

call getter
David
call getter
David

可以看到,前后兩次輸出的都是David,因為沒有setter,我們對o.name="James"的賦值根本沒有成功。

OK,結束。

什么是Object.assign?什么是Object.defineProperty?

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 前言 人生苦多,快來 Kotlin ,快速學習Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,710評論 9 118
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 4,202評論 1 10
  • 有的時候忽然覺得我的世界其實就是一個馬戲團,置身于馬戲團,它讓圍圈而坐高高在上的觀眾興奮不已。卻讓身為小丑的我倍感...
    守望風城閱讀 889評論 0 1
  • 摘要--色如聚沫--痛如泡影--皆悉空寂--無有真正 目錄--電露泡影--荷亭聽雨--心如秋月--人杳雙忘 心中留...
    物非人非閱讀 415評論 0 2
  • 今天是情人節(jié),有情人賠伴是很幸福的事,沒人陪伴也是很正常的事,我們自己才是自己一輩子最忠實的情人。所以我們更要開心...
    陳卓越閱讀 259評論 0 2

友情鏈接更多精彩內(nèi)容