代码之家  ›  专栏  ›  技术社区  ›  Anters Bear

javascript中的didset:变量更改时调用函数

  •  0
  • Anters Bear  · 技术社区  · 6 年前

    有等价物吗 didSet Swift 在里面 Javascript ?basicall在变量改变时自动调用函数。这样做的目的不是每次都必须调用一个函数,如下所示:

    var x = someType()
    x.behavior = newBehavior
    alterBehavior(x, newBehavior)
    function alterBehavior(var,behavior) { // change behavior of var }
    

    我可以就这么做

    var x = someType()
    someType didSet { // change behavior of var }
    x.behavior = newBehavior
    

    1 回复  |  直到 6 年前
        1
  •  2
  •   lorefnon    6 年前

    const target = { 
        hello: "world", 
        didSet: (oldVal, newVal) => {
            console.log('oldVal =>', oldVal, 'newVal =>', newVal)
        }
    }
    
    const pseudoTarget = new Proxy(target, {
        set(object, prop, val) {
            const oldVal = object[prop]
            object[prop] = val
            if (typeof object.didSet === "function") {
                object.didSet(oldVal, val)
            }
        }
    })
    

    pseudoTarget.hello = "new world"
    VM544:4 oldVal => world newVal => new world
    "new world"
    

    MobX