zclzye
侠客
侠客
  • 最后登录2025-01-01
  • 发帖数17
阅读:36740回复:3

Proxy 简单实现属性处理和权限控制--(无属性不报错)

楼主#
更多 发布于:2019-09-15 23:21

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Proxy</title>
</head>
<body>
    <div id="content"></div>
    <div id="test"></div>
</body>
    <script>

        // get 代理 实现属性处理
        function getProxy(){
            console.error('line 26 ->> obj arg error 请检查是否有这一个属性');
            return '参数不存在'
        }    

        let obj = {
            a:1000000000000
        };

        let objName = new Proxy(obj, {
            get: function (target, prototy) {
                return target[prototy] || getProxy()
            }
        })

        test.innerHTML = objName.b;

        // apply 代理函数调用实现权限判断
        let user = {
            role: 'admin',
            name: 'lishiwen',
            deleteContent: requireAdminRole(() => {
                console.log('delete fun')
            })
        }

        function requireAdminRole (f) {
            return new Proxy(f, {
                apply: function (target,thisArg) {
                    if (thisArg.role === 'admin') {
                        target.call(thisArg);
                        return '可以删除'
                    } else {
                        console.error('line 48 ->> 只有 admin 权限能对内容进行删除')
                    }
                }
            })
        }

        content.innerHTML = user.deleteContent();    
    </script>
</html>
doubleyong
管理员
管理员
  • 最后登录2025-12-02
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
沙发#
发布于:2019-09-16 11:33
zclzye:只是写个小DEMO 哈,大家写代码可不能这样回到原帖
哈哈,学习了
知识需要管理,知识需要分享
zclzye
侠客
侠客
  • 最后登录2025-01-01
  • 发帖数17
板凳#
发布于:2019-09-15 23:30
只是写个小DEMO 哈,大家写代码可不能这样
zclzye
侠客
侠客
  • 最后登录2025-01-01
  • 发帖数17
地板#
发布于:2019-09-15 23:23
代码分享这么花里胡哨啊
游客


返回顶部

公众号

公众号