题解 | #监听对象#

监听对象

http://www.nowcoder.com/practice/2cd8f8421e9b42b98152f56ef5e0ac79

33_监听对象

本题考点:Object.defineProperty、get、set

根据题目要求,对”person“对象数据进行拦截,在拦截中操作页面的渲染,核心步骤有:

  1. 创建”Observe“函数,接收一个对象参数,首先判断该对象参数是否合法,之后通过遍历对象的所有属性进行拦截操作。尽管可以直接使用Object.defineProperty函数对”person“对象进行拦截,但是可以通过创建”Observe“函数来封装对某个对象的属性劫持功能,之后可以复用此函数。
  2. 创建“defineReactive”函数,接收三个参数分别为该对象、对象属性、对象属性值。该函数内部使用Object.defineProperty函数对该对象的属性值进行拦截,且每当触发set时,调用”render“方法重新渲染视图

参考答案

function Observe(target) {
    if (typeof target !== 'object' || target == null) {
        return target
    }
    for (var key in target) {
        defineReactive(target, key, target[key])
    }
}
function defineReactive(target, key, value) {
    Object.defineProperty(target, key, {
        get: function () {
            return value
        },
        set: function (newVal) {
            if (newVal !== value) {
                value = newVal
                _render(ul)
            }

        }

    })
}
Observe(person)

全部评论
我的也运行错我
点赞 回复 分享
发布于 04-29 19:48 河南
我也运行错误
点赞 回复 分享
发布于 2024-06-30 20:50 浙江
啊,运行错误
点赞 回复 分享
发布于 2024-03-04 17:21 广东

相关推荐

饿魔:没人说?我来牛美孩
点赞 评论 收藏
分享
冲鸭2024:亚信不去也罢
投递亚信科技(中国)有限公司等公司6个岗位
点赞 评论 收藏
分享
评论
25
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务