基本数据类型添加了getter,解析不了
发布于 5 年前 作者 ganggu 12639 次浏览 来自 问答

app.js

App({

    onLaunch: function () {

        Number.prototype.__defineGetter__(‘ap’, function () { return this / 100 })

    }

})

index.js

data: {

    num: new Number(123456789)

},

onLoad: function(){

    console.log(this.data.num.ap)            //1234567.89

}

index.wxml

{{  num }}  可以解析   {{  num.ap }}  解析不了,空白

是bug,还是刻意为之

1 回复

可以搞成这样啊  {{num.value}} {{num.ap}}

小程序搞不了那么多骚操作

因为js的逻辑和渲染不是同一个运行环境

你setData的时候其实是调用了JSON.stringify 把数据搞成字符串之后再发给渲染线程,渲染线程在解析成object之后一顿diff操作再更新到UI上。

JSON.stringify 的时候prototype这种东西会直接忽略掉,你的数据序列化之后就是一个plain object,就没有啥骚特性了。


你可以参考小程序官方文档上的资料:

setData工作原理

https://developers.weixin.qq.com/miniprogram/dev/framework/performance/tips.html





当然,你在react里面setState搞是完全没有问题的,因为是对象,引用,不存在有序列话和反序列化的过程

回到顶部