js Symbol

135 阅读1分钟
let say = Symbol('say');
let eat = Symbol('eat');
let youxi = {
    name:'狼人杀',
    say:function(){
        consoel.log('I can say hi')
    },
    eat:function(){
        console.log('I am eatting')
    }
}

给一个对象拓展方法,不知道该对象中是否已经存在要拓展的方法名称,此时可以使用Symbol 例如:给 game对象拓展 up down 方法

let game = {
    up:function(){
        console.log('我是原来就有的up方法')
    },
    down:function(){
        console.log('我是原来就有的down 方法');
    }
}

let methods = {
    up:Symbol('up'),
    down:Symbol('down'),
}

// 此时 methods 对象是一个拥有两个属性up down 并且属性值是一个Symbol 类型的变量
// 此时可以考虑使用该对象的属性作为key给game对象拓展新的方法

game[methods.up] = function(){
    console.log('我是拓展的up方法')
}

console.log(game);
let newKey = methods.up;
game[newKey](); // 打印出拓展up方法
game.up(); //打印出原有的up方法