JJYdesu 2021-08-26 18:09
浏览 36
已结题

js用defineProperty深层监听对象时为什么我这样写没法调用到set?

function defineReactive(data,key,val){
    observe(val)
    let test = ''   //关键是这里,如果设成let test = val就没问题了,但不知道为什么
    let description = {
        enumerable:true,
        configurable:true,
        set:function(newVal){
            test = newVal   //或者这里不用test,直接用val = newVal也可以,但也不知道为什么
            console.log('属性' + key + '已经被监听了,现在值为:“' + newVal.toString() + '”')
        },
        get:function(){
            return test
        }
    }
    Object.defineProperty(data,key,description)
}

function observe(data){
    if(!data || typeof data !== 'object'){
        return
    }
    Object.keys(data).forEach(function(key){
        defineReactive(data,key,data[key])
    })
}
var library = {
    book1: {
        name: ''
    },
    book2: ''
};
observe(library);

library.book1.name = 'vue权威指南'  //没有执行set函数
library.book2 = '没有此书籍';   //这里却执行了set函数

遇到的问题在注释上面,求解答,感谢~

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 9月3日
    • 修改了问题 8月26日
    • 创建了问题 8月26日

    悬赏问题

    • ¥30 comsol仿真等离激元
    • ¥15 静电纺丝煅烧后如何得到柔性纤维
    • ¥15 (标签-react native|关键词-镜像源)
    • ¥100 照片生成3D人脸视频
    • ¥15 伪装视频时长问题修改MP4的时长问题,
    • ¥15 JETSON NANO
    • ¥15 VS开发qt时如何在paintgl函数中用pushbutton控制切换纹理
    • ¥20 关于 openpyxl 处理excel文件地问题
    • ¥15 MS中不知道高分子的构型怎么构建模型
    • ¥60 QQOP数据,什么是op数据号,怎么提取op数据!能不能大量提取(语言-c语言)