ES6 Symbol创建对象属性值(调用Symbol方法汇总)

这篇博客介绍了如何在JavaScript中利用Symbol来为对象添加独特且不可重名的属性和方法。通过示例展示了两种方法创建并调用Symbol类型的方法,强调了Symbol的独特性和在避免命名冲突中的作用。
摘要由CSDN通过智能技术生成
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>

        // 对象添加Symbol添加Symbol类型的属性和方法
        //方法1
        let obj = {
            up: function () {
                console.log('我是亲生up方法');
            },
            down: function () {
                console.log('我是亲生down方法');
            }
        }
        let methods = {
            up: Symbol(),
            down: Symbol()
        };
        //新增方法
        obj[methods.up] = function () {
            console.log('我是新添加的up方法');
        }
        //Symbol方法调用
        console.log(obj);        //{up: ƒ, down: ƒ, Symbol(): ƒ}
        obj.up();                //我是亲生up方法
        console.log(obj.up);     //ƒ () { console.log('我是亲生up方法');}
        obj[methods.up]();       //我是新添加的up方法
        console.log(obj[methods.up]); //ƒ () { console.log('我是新添加的up方法');}

        //方法2
        let say = Symbol('say');
        let close = Symbol('close');

        let game = {
            name: '狼人杀',
            [say]: function () {
                console.log('发言');
            },
            close: function () {
                console.log('闭眼');
            },
            // [Symbol.('zibao')]: function () {
            //     console.log('自爆');
            // }
            [Symbol.for('zibao')]: function () {
                console.log('自爆');
            }
        }
        console.log(game); //{name: '狼人杀', close: ƒ, Symbol(say): ƒ, Symbol(zibao): ƒ}
        console.log(game.name);  //狼人杀
        console.log(game[say]); // f() { console.log('发言');}
        game.say;  //不报错,也不输出
        console.log(11);
        game.close();   // 闭眼
        console.log(game.close());   //闭眼+undefined  //无法输出 f() { console.log('闭眼');}
        game[Symbol.for('zibao')]();  //自爆
        //Symbol.for('say')产生的标识是唯一的,所以可以调用定义在youxi里面的[Symbol.for('say')]方法
        // game[Symbol('zibao')](); //报错
        //因为Symbol('say')生成的标识不是唯一的,所以定义的在game里面的[Symbol('xxx')]是无法调用的,除非把Symbol('xxx')放在外面定义,并用变量保存

    </script>

</body>

</html>

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值