To="+911234567899"&From="+9987654321"&Body="Hen"
中的didSet
中的Swift
是否等效? Basicall在变量更改后自动调用函数。这样做的目的是不必每次都按如下所述调用函数:
Javascript
我可以做
var x = someType()
x.behavior = newBehavior
alterBehavior(x, newBehavior)
function alterBehavior(var,behavior) { // change behavior of var }
这是一个简单的示例,但是对于我的用例,每次更改子属性时,这将为我节省大量时间/函数调用。
答案 0 :(得分:2)
JavaScript没有完全相同的名称。
您可以使用代理(它是较低级别的API)来模拟等效项
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)
}
}
})
现在,当您设置属性时,didSet函数将在存在时被调用。
pseudoTarget.hello = "new world"
VM544:4 oldVal => world newVal => new world
"new world"
对于现实世界的项目,您可能需要使用更高级别的库,例如:MobX。