第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

感覺Object.defineProperty 的設(shè)計(jì)有點(diǎn)繁瑣啊

感覺Object.defineProperty 的設(shè)計(jì)有點(diǎn)繁瑣啊

互換的青春 2018-09-05 09:09:27
get set 不能和value同時(shí)使用。那么就是說 get和set的時(shí)候都是在操作別人,不能操作自己。多了一個(gè)別人var book={}我想像中的用法:Object.defineProperty(book,"year",{     value:2014,    get: function() {        return this.year;     },    set: function(value) {       this.year=value;     } });這么多么節(jié)約內(nèi)存啊。。操作的是自己,操作自己,操自己。。而現(xiàn)實(shí)是:目前的用法:var book = {     _year: 2014, }; Object.defineProperty(book,"year",{    get: function() {        return this._year;     },    set: function(value) {       this._year=value;     } });操作的是別人,操作別人,操別人。。如果key超級(jí)多,那么需要為每個(gè)key額外增加對(duì)應(yīng)的操作器。。。var book = {    _year1: 2014,    _year2: 2014,    _year3: 2014,    _year4: 2014,    _year5: 2014,    _year6: 2014,     _year7: 2014,     ... .... };是不是不太合理。。? 能寫個(gè)函數(shù)統(tǒng)一處理吧?能的話 也是多個(gè)函數(shù)啊。
查看完整描述

1 回答

?
米琪卡哇伊

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊

  1. set/get本來就是為了應(yīng)對(duì)特殊情況而設(shè)定的東西,當(dāng)然要操作別人

    Object.defineProperty(book,"year",{
        value:2014,    get: function() {        return this.year + 1;
        },    set: function(value) {       this.year = value - 1;
        }
    });

    好了,現(xiàn)在year這個(gè)屬性又有它自己的值,還有自己的get/set設(shè)置器,我們對(duì)它進(jìn)行RHS查找的時(shí)候到底應(yīng)該返回哪個(gè)?當(dāng)然,在語言層面上當(dāng)然可以設(shè)計(jì)成直接返回get設(shè)置器的返回值,也不和現(xiàn)在的矛盾,但是它既有設(shè)置器又有自己的value,這在邏輯上容易被混淆,個(gè)人覺得當(dāng)然還是分開比較好,從這一點(diǎn)上來考慮我覺得這么設(shè)計(jì)并沒有什么不妥。

  2. Lz這種想法大概是源自一種代碼上潔癖?我其實(shí)也有,你的第二個(gè)例子這么使用起來確實(shí)怪怪的,對(duì)于_year這種內(nèi)部的變量,假如js有私有變量這種形式的變量的話,我們就能把_year隱藏起來,大概Lz就不會(huì)有什么意見了,不知道我有沒有猜中?
    我見過的JS代碼其實(shí)不多,不過需要模擬私有變量的情況,我一般都用閉包的方法:

    var book = new (function(){
        _year = 2014;
        
        Object.defineProperty(this, "year", {        get: function() {            return _year;
            },        set: function(value) {
               _year = value;
            }
        });
    })();

    用這種方法模擬一個(gè)類,這個(gè)函數(shù)形成了個(gè)閉包,_year是內(nèi)部的變量,外部訪問不到,這樣一來book對(duì)象對(duì)外就只暴露了year的接口,看起來比剛才那樣是不是要好多了?

  3. 如果key超級(jí)多,那么需要為每個(gè)key額外增加對(duì)應(yīng)的操作器
    這種情況的話,和你有超級(jí)多的屬性有什么區(qū)別嗎?那么多屬性不一樣要挨個(gè)賦值……


查看完整回答
反對(duì) 回復(fù) 2018-10-08
  • 1 回答
  • 0 關(guān)注
  • 711 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)