成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript對象的屬性getter和setter

Olivia / 543人閱讀

摘要:存取器屬性的介紹對象的屬性是由名字值和一組特性組成。在中,屬性值可以用一個或兩個方法代替,這兩個方法就是和。例如,下面這個表示笛卡爾點坐標(biāo)的對象,它還有兩個等價的存取器屬性用來表示點的極坐標(biāo)在這段代碼中,在函數(shù)體內(nèi)的指向表示這個點的對象。

存取器屬性的介紹

JavaScript對象的屬性是由名字、值和一組特性組成。在ECMAScript中,屬性值可以用一個或兩個方法代替,這兩個方法就是getter和setter。有g(shù)etter和setter定義的屬性稱做“存取器屬性(accessor property)”。普通的屬性稱做“數(shù)據(jù)屬性(data proper同樣)”,數(shù)據(jù)屬性只有一個簡單的值。
當(dāng)程序查詢存取器屬性的值時,JavaScript調(diào)用getter方法(無參數(shù))。這個方法的返回值就是屬性存取表達(dá)式的值。當(dāng)程序設(shè)置一個存取器屬性的值是,JavaScript調(diào)用setter方法,講賦值表達(dá)式右側(cè)的值當(dāng)做參數(shù)傳入setter。從某種意義上講,這個方法負(fù)責(zé)“設(shè)置”屬性值??梢院雎詓etter方法的返回值。
和數(shù)據(jù)屬性不同,存取器屬性不具有可寫性(writable attribute)。如果屬性同時具有g(shù)etter和setter方法,那么它是一個讀/寫屬性。如果它只有g(shù)etter方法,那么它是一個只讀屬性。如果它只有setter方法,那么它是一個只寫屬性。讀取只寫屬性總是返回undefined。
存取器屬性定義為一個或兩個和屬性同名的函數(shù),這個函數(shù)定義沒有使用function關(guān)鍵字,而是使用get和(或)set。注意這里沒有使用冒號將屬性名和函數(shù)體分隔開,但在函數(shù)體的結(jié)束和下一個方法或數(shù)據(jù)屬性之間有逗號分隔。例如,下面這個表示笛卡爾點坐標(biāo)的對象,它還有兩個等價的存取器屬性用來表示點的極坐標(biāo):

var p = {
    x: 1.0,
    y: 1.0,
    get r() { return Math.sqrt(this.x*this.x + this.y*this.y)},
    set r(newvalue) {
        var oldvalue = Math.sqrt(this.x*this.x + this.y*this.y);
        var radio = newvalue/oldvalue;
        this.x *= radio;
        this.y *= radio;
    },
    get theta() { return Math.atan2(this.y, this.x); }
}
在這段代碼中,在函數(shù)體內(nèi)的this指向表示這個點的對象。和數(shù)據(jù)屬性一樣,存取器屬性是可以繼承的。

存取器屬性可以做什么

在segmentfault一個問答看到的兩個例子:

在某個屬性被設(shè)置時打印日志

set: function(pw) {
    this.pw = pw;
    console. log("密碼被修改了");
}

在某個屬性被設(shè)置時更新其他屬性

set: function(a) {
    this.a = a;
    this.b = a * 100;
}

Vue的響應(yīng)式原理也是通過setter,getter實現(xiàn)的:Vue官網(wǎng)-響應(yīng)式原理

我的理解就是:當(dāng)某個屬性被更新,即當(dāng)Vue實例中的data對象的某個屬性被設(shè)置,通過setter更新其他屬性,從而實現(xiàn)雙向數(shù)據(jù)綁定。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/89241.html

相關(guān)文章

  • JavaScript對象屬性gettersetter方法

    摘要:對象的屬性是由名字值和一組特性可寫可枚舉可配置等構(gòu)成的。在中,屬性值可以用一個或兩個方法代替,這兩個方法就是和。上面的代碼中,屬性稱為數(shù)據(jù)屬性,它只有一個簡單的值像屬性這種用和方法定義的屬性稱為存取器屬性。 最近在重新看vue2.x的文檔,注意到computed中的setter和getter,以前就知道他倆是干嘛的,但是不知道原理,然后決定查看一些資料,搞明白setter和getter...

    neu 評論0 收藏0
  • javascript基礎(chǔ)-Vue數(shù)據(jù)綁定前奏對象屬性

    摘要:關(guān)于有人說我用刪除這個屬性不就好了之后打印發(fā)現(xiàn)它還是一只哈士奇。如下的解釋如下操作符會從某個對象上移除指定屬性。 javascript-Object-Property ? javascript-對象的屬性的延伸學(xué)習(xí) showImg(https://segmentfault.com/img/bVNH2S?w=640&h=640); 前言 在學(xué)習(xí)vue數(shù)據(jù)綁定的較底層原理時,被setter...

    zebrayoung 評論0 收藏0
  • JavaScript || 對象

    摘要:通過對返回字符串切片第位到倒數(shù)第位即可獲得對象的類型。測試對象是的深拷貝是的子集,不能表示中所有值。序列化結(jié)果是,對象序列化結(jié)果是日期字符串不能表示函數(shù)對象和只能序列化對象自有的可枚舉屬性。 對象 對象是JavaScript的基本數(shù)據(jù)類型:屬性的無序集合。每個屬性key: value和屬性描述符descripter組成。 屬性名key:字符串或合法的變量標(biāo)識符; 屬性值value:...

    lavor 評論0 收藏0
  • 《JS高程》—— 數(shù)據(jù)屬性與訪問器屬性

    摘要:中有兩種屬性數(shù)據(jù)屬性和訪問器屬性數(shù)據(jù)屬性數(shù)據(jù)屬性包含一個數(shù)據(jù)值的位置。表示能否通過刪除屬性從而重新定義屬性可配置的能否修改屬性的特性能否把屬性修改為訪問器屬性。以上代碼在對外上定義了兩個數(shù)據(jù)屬性和和一個訪問器屬性。 屬性類型: ECMA-262第5版在定義只有內(nèi)部才用的特性(attribute)時,描述了屬性(property)的各種特征。ECMA-262定義這些特性是為了實現(xiàn)Java...

    yearsj 評論0 收藏0
  • 【js細(xì)節(jié)剖析】通過"="操作符為對象添加新屬性時,結(jié)果會受到原型鏈上同名屬性

    摘要:在使用的過程中,通過操作符為對象添加新屬性是很常見的操作。但是,這個操作的結(jié)果實際上會受到原型鏈上的同名屬性影響。通過它,可以做到操作符做不到的事情,比如為對象設(shè)置一個新屬性,即使它的原型鏈上已經(jīng)有一個的同名屬性。 在使用JavaScript的過程中,通過=操作符為對象添加新屬性是很常見的操作:obj.newProp = value;。但是,這個操作的結(jié)果實際上會受到原型鏈上的同名屬性...

    wemallshop 評論0 收藏0

發(fā)表評論

0條評論

Olivia

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<