题解 | #监听对象#

监听对象

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

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
        <style>
            ul {
                list-style: none;
            }
        </style>
        <ul></ul>

        <script>
            var ul = document.querySelector('ul');
            var person = { sex: '男', age: '25', name: '王大锤', height: 28, weight: 32 };
            const _render = element => {
                var str = `<li>姓名:<span>${person.name}</span></li>
                           <li>性别:<span>${person.sex}</span></li>
                           <li>年龄:<span>${person.age}</span></li>
                           <li>身高:<span>${person.height}</span></li>
                           <li>体重:<span>${person.weight}</span></li>`
                element.innerHTML = str;
            }
            _render(ul);
            // 补全代码
            //创建函数对目标对象进行数据拦截
            function Observe(target){
                //判断传入的目标对象是否是合法对象
                if(typeof target !== 'object' || target == null){
                    return target;
                }
                //对目标对象的key值进行遍历
                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(newValue){
                        if(newValue !== value){
                            value = newValue
                        }
                        _render(ul);
                    }
                })
            }
            
            Observe(person)
        </script>
    </body>
</html>
此题主要是对Object.defineProperty()方法考察
全部评论

相关推荐

球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务