美文网首页
class私有属性 Symbol 模拟

class私有属性 Symbol 模拟

作者: 流动码文 | 来源:发表于2018-07-24 17:25 被阅读37次

    js中不支持private关键字私有属性,但是在实际项目中可能有这种需求,因此我们可以利用es6的一些特性来比较完美的模拟这种私有属性。下面提供了两种方法。

    1.使用symbol来模拟私有属性,因为Symbol是唯一的,且在外面不能拿到_name变量,因此该变量只能在Person中自己使用。

    const Person = (function(){
                var _name = Symbol('name');
                class Person {
                    constructor() {
                        this[_name] = 'haha';
                    }
                    
                    get name() {
                        return this[_name];
                    }
                }
                return Person
           })()
    
    
           var person = new Person();
           console.log('person', person.name);
    

    该方式是使用weakMap来存储私有属性值。

     let Person = (function() {
            let privateData = new WeakMap();
            function Person(name) {
                privateData.set(this, {name: name});
    
                console.log(privateData);
            }
    
            Person.prototype.getName = function() {
                return privateData.get(this).name;
            };
    
            return Person;
           }());
    

    相关文章

      网友评论

          本文标题:class私有属性 Symbol 模拟

          本文链接:https://www.haomeiwen.com/subject/pjjymftx.html