美文网首页
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