一个 setter 死循环错误 - V2EX
cutemurphy2888

一个 setter 死循环错误

  •  
  •   cutemurphy2888 Mar 24, 2022 3869 views
    This topic created in 1511 days ago, te information mentioned may be changed or developed.
    class Dep {
    constructor(value) {
    this.value = value;
    }

    get value() {
    return this.value;
    }

    set value(newValue) {
    this.value = newValue;
    }
    }

    let dep = new Dep("cc");
    dep.value='dd';
    18 replies    2022-05-16 18:30:14 +08:00
    10bkill1p
        1
    10bkill1p  
       Mar 24, 2022
    用一个中间变量去传,直接修改是会死循环的。
    ccyu220
        2
    ccyu220  
       Mar 24, 2022
    确实第一次见 get set 和参数名写一样的...
    faceRollingKB
        3
    faceRollingKB  
       Mar 24, 2022
    class Dep {
    constructor(value) {
    this._value = value;
    }

    _value
    get value() {
    return this._value;
    }

    set value(newValue) {
    this._value = newValue;
    }
    }
    lisongeee
        4
    lisongeee  
       Mar 24, 2022
    js/python 不像 kotlin ,setter/getter 需要手动声明额外的变量保存状态,kotlin setter/getter 内部有一个关键字 field ,无需手动额外声明变量
    cutemurphy2888
        5
    cutemurphy2888  
    OP
       Mar 24, 2022
    @lisongeee 那为什么设计者不借鉴一把 /
    lisongeee
        6
    lisongeee  
       Mar 24, 2022   2
    我不到啊
    KMpAn8Obw1QhPoEP
        7
    KMpAn8Obw1QhPoEP  
       Mar 24, 2022 via Android
    哈哈哈楼上对话太逗了
    misdake
        8
    misdake  
       Mar 24, 2022
    变量数据总要保存到一个地方,比如_value 这种。setter 里设置到同一个 setter 上肯定不行呀。
    AV1
        9
    AV1  
       Mar 24, 2022
    @faceRollingKB
    或许用私有变量更好
    class Dep {
    constructor(value) {
    this.#value = value;
    }

    #value
    get value() {
    return this.#value;
    }

    set value(newValue) {
    this.#value = newValue;
    }
    }

    let dep = new Dep("cc");
    dep.value = 'dd';


    @cutemurphy2888
    大概因为没几个人在 JS 里写 class 吧。
    TWorldIsNButThis
        10
    TWorldIsNButThis  
       Mar 24, 2022 via iPhone
    @cutemurphy2888 kotlin 没有 java 或者 js 里的字段,
    只有 property 的概念,property 是否对应一个真正的字段是编译器判断
    EyeLip
        11
    EyeLip  
       Mar 24, 2022
    @lisongeee 刀酱?
    blu10ph
        12
    blu10ph  
       Mar 24, 2022
    @cutemurphy2888 我刚才提的需求,上午为什么没有实现?~
    magewu1223ll
        13
    magewu1223ll  
       Mar 24, 2022
    应该是 get 引起的吧,每次都读取 一读取就触发 get 然后 get 里面又有个读取,然后触发 get 。。。。。。
    thinkershare
        14
    thinkershare  
       Mar 24, 2022
    因为它本来就应该死循环, 设计上这样写就应该死循环!
    jadehare
        15
    jadehare  
       Mar 24, 2022
    get value 死循环了,this.value = get value(),相当于方法自己调用自己了
    lisongeee
        16
    lisongeee  
       Mar 24, 2022
    @EyeLip 我是虎弟,你,来沈阳,指定没你好果汁吃
    volCan0
        17
    volCan0  
       Mar 24, 2022
    看看 vue3 的 ref
    Opportunity
        18
    Opportunity  
       May 16, 2022
    About     Help     Advertise     Blog     API     FAQ     Solana     1012 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 62ms UTC 22:30 PVG 06:30 LAX 15:30 JFK 18:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86